So for every single one of those cells (that $E is called) there is a
"new Element" instantiation and 2 enumerable methods (that are being
called recursively) : )
Why not just use string interpolation?
- kangax
On May 6, 5:43 pm, "Erik R." <[EMAIL PROTECTED]> wrote:
> I was thinking "Element", but now that you mention it, "Erik" makes
> more sense. :-)
>
> On May 6, 11:36 pm, Hector Virgen <[EMAIL PROTECTED]> wrote:
>
> > Very nice! Is $E() short for Erik? :)
>
> > Erik R. wrote:
> > > Recently I've been using prototype's wonderful new DOM creation
> > > syntax. But I found that it's still too verbose. Say I want to
> > > create the following table:
>
> > > <table id="myTable">
> > > <thead>
> > > <tr>
> > > <th>Title A</th>
> > > <th>Title B</th>
> > > </tr>
> > > </thead>
> > > <tbody>
> > > <tr>
> > > <td>A</td>
> > > <td>B</td>
> > > </tr>
> > > </tbody>
> > > </table>
>
> > > Simple, right? But, as I understand the prototype.js DOM building, to
> > > build this table, I'd have to do:
>
> > > var table = new Element('table', {id:myTable});
> > > var thead = new Element('thead');
> > > table.appendChild(thead);
> > > var theadRow = new Element('tr');
> > > thead.appendChild(theadRow);
> > > theadRow.appendChild(new Element('th').update('Title A'));
> > > theadRow.appendChild(new Element('th').update('Title B'));
> > > var tbody = new Element('tbody');
> > > table.appendChild(tbody);
> > > var tbodyRow = new Element('tr');
> > > tbody.appendChild(tbodyRow);
> > > tbodyRow.appendChild(new Element('td').update('A'));
> > > tbodyRow.appendChild(new Element('td').update('B'));
>
> > > Grossly verbose, I think you'll agree. Particularly, it's the saving
> > > of the local variables that bothers me.
>
> > > But what if we had a shortcut function? Just like $() is short for
> > > document.getElementById(), I think we could benefit from a shortcut
> > > element function. So I've written one: $E.
>
> > > var $E = function(tagName, attributes, childrenVarArgs)
> > > {
> > > var element = new Element(tagName, attributes);
> > > $A(arguments).flatten().each(function(child, i)
> > > {
> > > if (i > 1 && child)
> > > element.appendChild(child);
> > > });
> > > return element;
> > > };
>
> > > It takes the tagName and attributes just like the Element constructor,
> > > but it will also take other arguments that will be appended as
> > > children. Look at the new code to create that same table:
>
> > > var table = $E('table', {id:myTable},
> > > $E('thead', null,
> > > $E('tr', null,
> > > $E('th').update('Title A'),
> > > $E('th').update('Title B'))),
> > > $E('tbody', null,
> > > $E('tr', null,
> > > $E('td').update('Title A'),
> > > $E('td').update('Title B'))));
>
> > > A little nicer, don't you think? Some intelligent argument parsing
> > > might also be added to get rid of those null attribute parameters.
>
> > > Anyway, I'm submitting this as a suggestion to be incorporated into
> > > the next release of prototype.js. Let me know what you think.
>
> > > Cheers,
> > > Erik
--~--~---------~--~----~------------~-------~--~----~
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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---