2012-12-17 3 views
7

In der Vergangenheit habe ich sehr einfach Pub/Sub in jQuery durch Bindung an das Fenster gemacht.jQuery Callback und Pub/Sub

// subscribe 
$(window).on("someEvent", function() { ... }); 

// publish 
$(window).trigger("someEvent"); 

Allerdings habe ich gelernt, vor kurzem über die neuen Rückrufe verfügen, die die empfohlene Art des Umgangs pub/sub in jQuery zu sein scheint.

Was sind die Vorteile der Verwendung von Callback, anstatt nur auf das Fenster zu binden? Für ein einfaches System wie das oben genannte verwendet die Callback-Funktion Overkill?

Edit: Hier ist ein wenig mehr Informationen darüber, wie ich häufig die oben ...

Das ist etwas, dass ich manchmal miteinander zu sprechen mein jQuery-Plugins ermöglichen tun. Zum Beispiel habe ich meine eigenen ziehbaren und Dropbare Plugins, die kommunizieren müssen.

Wenn das Ziehen gestartet, aktualisiert und beendet wird, löst das ziehbare Plugin benutzerdefinierte Ereignisse im Fenster aus. Das Drop-fähige Plugin beobachtet diese Ereignisse und reagiert entsprechend.

// in draggable 

onStart: function() { 
    $(window).trigger("dragger.start", [data]); 
} 

// in droppable 

$(window).on("dragger.start", function(event, data) { 
... 
}); 
+0

Ich schätze, Sie müssen ein wenig auf Ihre Frage erweitern! Welche Rückrufe und wie beabsichtigen Sie, sie zu verwenden? Wofür verwenden Sie diese benutzerdefinierten Ereignisse speziell? Ein Pub/Subsystem kann eine Menge verschiedener Dinge sein. – adeneo

+0

Fairer Kommentar - Ich habe weitere Informationen hinzugefügt – user1031947

Antwort

1

zum Fenster Bindung ist nicht problematisch an und für sich, sondern weil andere Ereignisse können und ungebunden aus dem Fenster gebunden werden, um Ihr System kann Nebenwirkungen haben, dass Sie nicht beabsichtigen. Beispielsweise wird $(window).off() die Bindung "someEvent" lösen, auch wenn es nur Ihre Absicht war, häufigere Ereignisse wie "scroll" oder "click" zu lösen.

würde ich nicht sagen, dass Rückrufe mit viel des Guten ist, weil es relativ einfach ist - ich würde als noch einfacher sagen, was Sie getan haben:

var callbacks = $.Callbacks(); 
callbacks.add(function() { ... }); 
callbacks.fire(); 

Das ist alles, was Sie brauchen, würde Ihr Beispielcode ersetzen . Ein Vorteil, den ich sofort sehe, ist, dass Sie den Namen des Ereignisses, das Sie während der Trigger-Phase auslösen müssen, nicht kennen müssen. es wird transparenter gehandhabt, was oft nett ist.

Sie können einem einzelnen Callback auch mehrere Funktionsaufrufe hinzufügen oder mehrere Callbacks gleichzeitig ausführen. Dies ist schwieriger zu tun, wenn Sie nur window verwenden.

1

Ich denke, dass mit jQuery Callbacks ($ .Callbacks()) für viel sauberer Code und ist viel besser organisiert als Ihre Methode der Bindung einer Funktion an ein Fenster. Sie haben mehr Flexibilität, da Sie die Namen der Ereignisse, die beim Auslösen des Rückrufs verwendet werden, nicht kennen müssen.