is it possibile to create a subclass of DOM Elements? For example I would like to be able to write: var MyMenu = Class.create(''UL'', { initialize: function () { }, addItem: function (item) { // create new LI and attach to this } }); var menu = new MyMenu(); menu.addItem(''hello''); and I would like this code to create a new UL element, which would have an addidional addItem method. Is it possible? --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---
I don''t think you can do that, but something like the following might do the trick for you: var Menu = Class.create({ initialize: function(id) { this.id = id; this.items = []; }, addItem: function(item) { this.items.push(item); return this; }, toElement: function() { var menu = new Element("ul", { id: this.id, className: "menu" }); this.items.map(Element.insert.curry(menu)); return menu; } }); You could have a similar MenuItem class that encapsulates the logic of your menu items (event handling and whatnot), whose toElement returns a <li>. Then, since your Menu class responds to "toElement" you can just pass it to Element.insert/update, etc to add it to the DOM. var fileMenu = new Menu("file"); fileMenu.addItem(...); $("menu_bar").insert(fileMenu); See also http://groups.google.com/group/rubyonrails-spinoffs/msg/d8a72071c044d7e3 for more on how toElement works. Best, -Nicolas On Dec 7, 2007 12:10 PM, rzarajczyk-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org <rzarajczyk-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > is it possibile to create a subclass of DOM Elements? For example I > would like to be able to write: > > var MyMenu = Class.create(''UL'', { > initialize: function () { > }, > addItem: function (item) { > // create new LI and attach to this > } > }); > > var menu = new MyMenu(); > menu.addItem(''hello''); > > and I would like this code to create a new UL element, which would > have an addidional addItem method. Is it possible? > > >--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---
On 07/12/2007, rzarajczyk-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org <rzarajczyk-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > is it possibile to create a subclass of DOM Elements? For example I > would like to be able to write: > > var MyMenu = Class.create(''UL'', { > initialize: function () { > }, > addItem: function (item) { > // create new LI and attach to this > } > }); > > var menu = new MyMenu(); > menu.addItem(''hello''); > > and I would like this code to create a new UL element, which would > have an addidional addItem method. Is it possible?Absolutely. You can use ... Element.addMethods(''UL'', { addItem: function(element, s_TextOrHTML) { // Extend the select. element = $(element); // Create the new LI var o_LI = document.createElement(''LI''); element.insert(o_LI); o_LI.update(s_TextOrHTML); return element; } }); maybe. Slightly tested. This adds a new method to all ULs. $(''someULid'').addItem(''Text or <b>html</b>''); -- ----- Richard Quadling Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731 "Standing on the shoulders of some very clever giants!" --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---
Yes, to ALL ULs. And I want to add method only to selected UL''s - those, which are instances of MyMenu. So far the only working workaround I know is using global object - MyMenuFactory: MyMenuFactory = { createMenu: function () { var menu = new Element(''ul''); menu.addItem = function () { ... } } } The results are similar to what I want, but from the OOP point of view it''s wrong - and besides it uses one more name in global namespace (I would like to avoid it) @Nicolás Sanguinetti: to insert/update yes, but what if I want to remove the menu later? -- Rafal Zarajczyk On Dec 7, 3:53 pm, "Richard Quadling" <rquadl...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> On 07/12/2007, rzarajc...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org <rzarajc...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > > > > is it possibile to create a subclass of DOM Elements? For example I > > would like to be able to write: > > > var MyMenu = Class.create(''UL'', { > > initialize: function () { > > }, > > addItem: function (item) { > > // create new LI and attach to this > > } > > }); > > > var menu = new MyMenu(); > > menu.addItem(''hello''); > > > and I would like this code to create a new UL element, which would > > have an addidional addItem method. Is it possible? > > Absolutely. > > You can use ... > > Element.addMethods(''UL'', { > addItem: function(element, s_TextOrHTML) { > // Extend the select. > element = $(element); > > // Create the new LI > var o_LI = document.createElement(''LI''); > element.insert(o_LI); > o_LI.update(s_TextOrHTML); > > return element; > } > > }); > > maybe. Slightly tested. > > This adds a new method to all ULs. > > $(''someULid'').addItem(''Text or <b>html</b>''); > > -- > ----- > Richard Quadling > Zend Certified Engineer :http://zend.com/zce.php?c=ZEND002498&r=213474731 > "Standing on the shoulders of some very clever giants!"--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---