@TJ

Yeah. I sort of noticed that.

I like the observeAll mechanism. Very reusable.

In PHP, I could ...

if (!!fn || fn = function(){...}) {
 fn();
}

sort of thing. Basically assign a value to a variable and evaluate the
assignment. For closures, this is always true.

Could this be done in JS?



On 23 December 2010 15:21, T.J. Crowder <t...@crowdersoftware.com> wrote:
> @Richard:
>
>> Maybe something like ...
>>
>> ['keyup', 'click', 'focus', 'blur'].each(function(eventName){
>>  $('filter').observe(eventName, function(evt){
>>   this.fire('check:filter');
>>  });
>>
>> });
>
> That creates four identical functions (one for each event). Not
> necessarily a problem, but...
>
> @Walter: How 'bout *really* not repeating yourself: ;-)
>
> // In your bag of tricks
> Element.addMethods({
>    observeAll: function(element, eventNames, handler) {
>        if (!(element = $(element))) return;
>        eventNames = typeof eventNames === "string" ? $w(eventNames) :
> eventNames;
>        eventNames.each(function(eventName) {
>            Event.observe(element, eventName, handler);
>        });
>        return element;
>    }
> });
>
> // Then in this specific case:
> $('filter').observeAll(['keyup', 'click', 'focus', 'blur'],
> function(evt) {
>   this.fire('check:filter');
> });
>
> // Or:
> $('filter').observeAll('keyup click focus blur', function(evt) {
>   this.fire('check:filter');
> });
>
> // Or even:
> var filter = $('filter');
> filter.observeAll(
>   'keyup click focus blur',
>   Element.fire.curry(filter, 'check:filter'));
>
> FWIW,
> --
> T.J. Crowder
> Independent Software Engineer
> tj / crowder software / com
> www / crowder software / com
>
> On Dec 23, 10:02 am, Richard Quadling <rquadl...@gmail.com> wrote:
>> On 22 December 2010 18:16, Walter Lee Davis <wa...@wdstudio.com> wrote:
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> > I have a quick filter for hiding list items until only matches show. I want
>> > to cover all the various ways that a user might interact with the search
>> > field, so I write this lovely:
>>
>> >        $('filter').observe('keyup', function(evt){
>> >                this.fire('check:filter');
>> >        });
>> >        $('filter').observe('click', function(evt){
>> >                this.fire('check:filter');
>> >        });
>> >        $('filter').observe('focus', function(evt){
>> >                this.fire('check:filter');
>> >        });
>> >        $('filter').observe('blur', function(evt){
>> >                this.fire('check:filter');
>> >        });
>>
>> > Is there any way to write this more clearly, as in with fewer lines of 
>> > code?
>>
>> > I'm using 1.6.latest, haven't tried the new 1.7 goodies yet. Would that
>> > help?
>>
>> > Walter
>>
>> > --
>> > You received this message because you are subscribed to the Google Groups
>> > "Prototype & script.aculo.us" group.
>> > To post to this group, send email to
>> > prototype-scriptacul...@googlegroups.com.
>> > To unsubscribe from this group, send email to
>> > prototype-scriptaculous+unsubscr...@googlegroups.com.
>> > For more options, visit this group at
>> >http://groups.google.com/group/prototype-scriptaculous?hl=en.
>>
>> Maybe something like ...
>>
>> ['keyup', 'click', 'focus', 'blur'].each(function(eventName){
>>  $('filter').observe(eventName, function(evt){
>>   this.fire('check:filter');
>>  });
>>
>> });
>>
>> --
>> Richard Quadling
>> Twitter : EE : Zend
>> @RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Prototype & script.aculo.us" group.
> To post to this group, send email to prototype-scriptacul...@googlegroups.com.
> To unsubscribe from this group, send email to 
> prototype-scriptaculous+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/prototype-scriptaculous?hl=en.
>
>



-- 
Richard Quadling
Twitter : EE : Zend
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY

-- 
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to prototype-scriptacul...@googlegroups.com.
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en.

Reply via email to