2012-04-06 10 views
19

Eine kurze Frage zu Ereignissen in Backbone - gibt es eine Möglichkeit, eine Reihe von globalen Ereignissen zu definieren, die in verschiedenen Ansichten wiederverwendet werden können?Backbone.js globale Ereignisse

Zum Beispiel - sagen, ich habe mehrere Ansichten, die auf der Seite gerendert werden. Jede Ansicht hat eine Schaltfläche, die ein Menü erweitert. Es gibt auch einige andere generische Elemente und Ereignisse. Ohne diese Ereignislogik in jede View zu integrieren, gibt es eine Möglichkeit, dass jede dieser Ansichten erben oder diese Ereignisse aus einer globalen Ereignisdefinition ziehen kann. Es würde sicherlich Zeit sparen und eine viel sauberere Lösung sein, indem diese generischen Ereignisse an einem Ort definiert werden.

Ich habe Begriffe wie Event Aggregator und Factory Muster herumgeworfen gesehen - aber nicht sicher über den besten Ansatz (oder ob sie erreichen, was ich will).

Antwort

51

Sie beschreiben im Grunde einen Ereignisaggregator oder Dispatcher, ja. Ich habe ein paar Artikel bekam auf den Aufbau und mit ihnen mit Backbone:

http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/

http://lostechies.com/derickbailey/2012/04/03/revisiting-the-backbone-event-aggregator-lessons-learned/

Und es gibt viele weitere Artikel rund um das Web für das gleiche zu tun mit Backbone und anderen pub/sub Bibliotheken.

Es ist ganz einfach in Backbone zu tun:


vent = _.extend({}, Backbone.Events); 

und jetzt haben Sie eine vent Objekt, das als ein Ereignis-Aggregator in ganz Ihrer Anwendung Ansichten und andere Objekte verwendet werden können.


vent.on("some:event", function(){ 
    console.log("some event was fired"); 
}); 

vent.trigger("some:event"); 
+3

Ich bin über Ihren ausgezeichneten Beitrag darüber gekommen und dachte, dass es die eleganteste Lösung war (die revisited mehr so)! Ich habe deinen Artikel verfolgt und es funktioniert gut - toller Artikel übrigens. Dies bedeutet jedoch immer noch, dass ich die Gruppe von Ereignissen in jeder Ansicht angeben muss (die einfach die erforderlichen Ereignisse auslösen). Da jede dieser Gruppen von Ansichten immer die gleiche Aufgabe ausführt (zum Beispiel eine Schaltfläche zum Hinzufügen oder Bearbeiten), gibt es eine Möglichkeit, die Ansichten weiter zu vereinfachen? – crawf

+0

FYI, sieht so aus, als ob deine lostechies.com-Domain automatisch zu https umleitet, aber es versucht, die GitHub-Code-Snippets über http zu laden und blockiert zu werden. –