If you are going to do something weird like that why implement something different into Element every time you would need something similar.
http://mootools.net/shell/P2AUg/ On Tue, Mar 30, 2010 at 10:12 PM, jacob <[email protected]> wrote: > Yeah just use regular adopt forbarry's example... but i'm trying to do > something different: > > $('moo').conditionalAdopt( condition, el1, el2, el3... ) > > Where conditonalAdopt evaluates the first parameter in terms of true/ > false -- then adopts the remaining elements only if the first > parameter was indeed true. > > This is particularly relevant if you want to reuse a large create > element method like this: > > var foo = new Class({ > > initialize:function(){ > var _this = this; > $('blah').addEvent('keyup', function(){ > this.adopt(_this.createElement(this.value)); > }); > }, > > createElement: function(value){ > return new Element('div').adopt( > > new Element('div'), > > new Element('div'), > > new Element('div').conditionalAdopt( > > value.test('moo'), //if value has moo in it, then adopt > the following elements > > new Element('div',{ > 'html': value > }), > > new Element('div',{ > 'html': value > }) > > ) > ); > } > > }); > > > what usually happens is you have to abstract that portion out into its > own function... and put your conditional there, leaving you with > something like: > > var foo = new Class({ > > initialize:function(){ > var _this = this; > $('blah').addEvent('keyup', function(){ > this.adopt(_this.createElement(this.value)); > }); > }, > > createElement: function(value){ > return new Element('div').adopt( > > new Element('div'), > > new Element('div'), > > new Element('div').adopt( > this.createSubStructure(value) > ) > ); > }, > > createSubStructure: funciton(value){ > if(value.test('moo')){ > return [new Element('div',{ > 'html': value > }), > > new Element('div',{ > 'html': value > })]; > } > return null; > } > > }); > On Mar 30, 5:35 pm, Jan Kassens <[email protected]> wrote: > > Can'’t you just use myElem.adopt(elema, elemb, elemc);? I think it skips > > null/false ‘elements’. > > > > On Tue, Mar 30, 2010 at 11:58 AM, Barry van Oudtshoorn < > > > > [email protected]> wrote: > > > Well, writing > > > > > myElem.conditionalAdopt(elema, elemb, elemc); > > > > > is a couple of characters shorter than writing > > > > > if (elema) { > > > myElem.grab(elema); > > > } > > > if (elemb) { > > > myElem.grab(elemb); > > > } > > > if (elemc) { > > > myElem.grab(elemc); > > > } > > > > > (even when minified), so if you use this pattern a lot, it could pay > off. > > > :) > > > > > Pragmatically, to reduce DOM manipulation, wouldn't this implementation > of > > > the function be somewhat more efficient: > > > > > Element.implement({ > > > conditionalAdopt: function() { > > > var els = []; > > > $A(arguments).each(function(item) { > > > item = document.id(item); > > > if (item) els.push(item); > > > } > > > return this.adopt(els); > > > } > > > }); > > > > > On 30/03/2010 5:23 PM, Oskar Krawczyk wrote: > > > > > ... on the web where every byte counts. > > > > > Haven't heard anyone saying that since 1999 - you know, 56K modems and > > > all :-) > > > > >> 2010/3/29 jacob <[email protected]> > > > > >> Anyone ever implemented something like this? or have a nicer way of > > >>> doing it? > > > > >>>http://mootools.net/shell/KPPNg/ > > > > >>> Element.implement({ > > > > >>> conditionalAdopt: function(){ > > >>> if(Array.prototype.splice.apply(arguments,[0,1])[0]){ > > >>> Array.flatten(arguments).each(function(element){ > > >>> element = document.id(element, true); > > >>> if (element) this.appendChild(element); > > >>> }, this); > > >>> return this; > > >>> } > > >>> return this; > > >>> } > > > > >>> }); > > > -- > To unsubscribe, reply using "remove me" as the subject. >
