2012-07-10 10 views
6

Ich muss oft einen Event-Handler binden und diesen Handler sofort in jQuery ausführen. Bis heute, ich habe mit diesem faulen faux-Muster den Code trocken zu halten:jQuery - einen einzelnen Handler binden und ausführen?

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

Heute habe ich von diesem gebissen wurde, aufgrund der Tatsache, dass andere Handler hatte bereits event gebunden worden, und sie waren Auch ausgeführt, als ich das Ereignis auf diese Weise ausgelöst habe, aber viele Probleme verursacht, da sie zu diesem Zeitpunkt nicht ausgeführt werden sollten.

das Problem zu beheben, habe ich das Muster änderte sich dies:

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

var element = $(...); 

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

Dies funktioniert so, wie ich erwarten würde, aber es ist hässlich wie die Sünde und recht ausführlich, so dass ich angesichts dieses Muster Einkapselung in ein jQuery-Plugin:

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

ich keine Entsprechung für diese in jQuery.bind() Optionen oder eine der anderen Methoden finden konnte, aber ich kann etwas verpasst haben. Gibt es eine prägnantere Vorgehensweise, an die ich nicht gedacht habe? Ich will das Rad nicht neu erfinden.

Antwort

3

jQuery unterstützt namespacing your events. Dies ist eine sehr nützliche Technik und ist sehr praktisch, wenn Sie eine bestimmte Gruppe von Ereignissen lösen oder auslösen möchten.

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

Mit dieser Technik ist fast unvermeidbar (oder zumindest vernünftig Leute werden es nicht vermeiden), wenn Sie größere Anwendungen oder jQuery-Plugins entwickeln.

Quick jsFiddle Demo

+0

Ich verstehe diesen Vorschlag nicht. Könntest du erklären? – FtDRbwLXw6

+0

Ich verwende keine benutzerdefinierten Ereignisse, daher bin ich mir nicht sicher, wie dies auf meine Situation zutrifft. Vielen Dank für Ihre Hilfe. – FtDRbwLXw6

+0

@drrcknlsn, können Sie auch "Standard" -Ereignisse namespace. –

Verwandte Themen