Hey! I found the Function.curry() method, and it works!

Is this the best way?



On Jun 30, 8:25 pm, greenie2600 <[EMAIL PROTECTED]> wrote:
> Hi all,
>
> New member here. I've been working with Prototype for a while, and I
> love it. However, there's one thing I still can't figure out.
>
> Let's say I have an array of objects, representing contacts in an
> address book:
>
> var contacts = [
>     { id: 1, firstName: "Bob", lastName: "Smith" },
>     { id: 2, firstName: "Sue", lastName: "Johnson" },
>     { id: 3, firstName: "Tim", lastName: "Horton" }
> ];
>
> I'd like to iterate over this array, create an <li> for each contact,
> and—here's the tricky part—attach an onclick observer to each <li>,
> which calls the openContact() function and passes in the ID of the
> contact that was clicked.
>
> I understand closures. However, I haven't found an elegant way to
> solve the problem. This won't work:
>
> function populateContactsList( contacts )
>
>     var theUL = document.getElementById("addr-book-index");
>     var thisLI = null;
>
>     for ( var i = 0; i < contacts.length; i++ ) {
>         thisLI = document.createElement("li");
>
> thisLI.appendChild( document.createTextNode( contacts[i].name ) );
>         theUL.appendChild( thisLI );
>         Event.observe( thisLI, "click", function() {
>             openContact( contacts[i].id );
>         } );
>     }
>
> }
>
> ...because every call to openContact() will receive 3 as the parameter
> - the value of contacts[i].id at the time the outer function exits.
>
> I've been kludging my way around the problem by storing data in the
> element's id attribute (e.g., <li id="contacts-index-3">Tim Horton</
> li>), but I'm not entirely happy with this solution. Suggestions?
>
> For bonus points: I like to use innerHTML to insert new content into
> the DOM. Yes, it's non-standard, but it's widely supported, and it's
> much faster than the DOM methods - 
> seehttp://quirksmode.org/dom/innerhtml.html.
> If you can suggest a clean technique that allows me to keep using
> innerHTML *and* attach onclick handlers in the way I've described,
> I'll write a song extolling your greatness.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Spinoffs" group.
To post to this group, send email to rubyonrails-spinoffs@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-spinoffs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to