2012-07-10 14 views
6

Często znajduję potrzebę powiązania obsługi zdarzeń, jak również natychmiastowego wykonania tego programu obsługi w jQuery. Do tej pory używam tego leniwego faux-wzór, aby zachować suchej kodu:jQuery - powiązanie i wykonanie pojedynczego programu obsługi?

$(...).bind('event', function() { 
    ... 
}).trigger('event'); 

Dzisiaj byłem ugryziony przez to, ze względu na fakt, że inne koparki już związany event i byli również wykonywane, gdy uruchomiłem zdarzenie w ten sposób, ale spowodowało wiele problemów, ponieważ nie powinny być one wykonywane w tym czasie.

Aby rozwiązać ten problem, mam zmieniony wzorzec do tego:

var handler = function() { 
    ... 
}; 

var element = $(...); 

element.bind('event', handler); 
handler.call(element); 

Działa to tak, jak ja się spodziewać, ale to brzydka jak grzech i dość gadatliwy, więc jestem rozważa enkapsulacji ten wzór do jQuery plugin:

$(...).bindAndExecute('event', function() { ... }); 

udało mi się znaleźć żadnego odpowiednika na ten cel w jQuery.bind() opcji lub którykolwiek z pozostałych metod, ale mogę coś przeoczyć. Czy istnieje bardziej zwięzły sposób robienia tego, o czym nie myślałem? Nie chcę wymyślać koła.

Odpowiedz

3

jQuery obsługuje namespacing your events. Jest to bardzo przydatna technika i jest bardzo przydatna, gdy chcesz rozpiąć lub wywołać określoną grupę zdarzeń.

$(...).bind('event.myNamespace', function() { 
    ... 
}).trigger('event.myNamespace'); 

Korzystanie z tej techniki jest prawie nieuniknione (albo przynajmniej rozsądny ludzie nie będą go unikać), kiedy rozwijają większe aplikacje lub wtyczek jQuery.

Quick jsFiddle Demo

+0

Nie rozumiem tej sugestii. Czy możesz wytłumaczyć? – FtDRbwLXw6

+0

Nie używam zdarzeń niestandardowych, więc nie jestem pewien, jak to się ma do mojej sytuacji. Dziękuję za pomoc, którą możesz zaoferować. – FtDRbwLXw6

+0

@drrcknlsn, możesz również "standardowe" zdarzenia przestrzeni nazw. –

Powiązane problemy