2012-09-12 2 views
6

In Bezug auf die BoilerplateJs Beispiel, wie sollten wir diese Module so intercommunicate so anpassen, sobald der Benutzer eine Änderung an einem Modul vorgenommen, sollten die anderen verwandten Module mit dieser Änderung aktualisiert werden.Gibt es eine Möglichkeit zur Kommunikation mit Modulen in bottleplatejs?

Wenn beispielsweise ein Modul zum Abrufen von Eingaben vom Benutzer als Name und Vertrieb und ein anderes Modul zum Aktualisieren dieser abgerufenen Daten in einer Tabelle oder einem Diagramm vorhanden ist, können Sie anhand eines Beispiels erläutern, wie diese Interverbindung unter Berücksichtigung des Ereignisses erfolgt Handhabung?

Danke !!

Antwort

3

In BoilerplateJS hat jedes Modul ein eigenes moduleContext-Objekt. Dieses Modulkontextobjekt enthält zwei Methoden "listen" und "notify". Weitere Informationen finden Sie in der Kontextklasse unter '/src/core/context.js'.

Die Komponente, die dem Ereignis "zuhören" muss, sollte sich für das Ereignis registrieren, indem sie den Namen des Ereignis- und Callback-Handlers angibt. Die Komponente, die das Ereignis auslöst, sollte die "notify" -Methode verwenden, um andere wissen zu lassen, dass etwas Interessantes passiert ist (optional das Übergeben eines Parameters).

Erhalten Sie ein Update des neuesten BoilerplateJS-Codes von GitHub. Ich habe gerade Änderungen vorgenommen, indem ich clickCounter zu einer Composite-Komponente gemacht habe, bei der "clickme-Komponente" ein Ereignis ausgelöst hat und eine "Lotterie-Komponente" das Ereignis abhört, um darauf zu reagieren.

-Code für die Benachrichtigung des Veranstaltung:

moduleContext.notify('LOTTERY_ACTIVITY', this.numberOfClicks()); 

-Code zu dem Ereignis zu hören:

moduleContext.listen("LOTTERY_ACTIVITY", function(activityNumber) { 
    var randomNum = Math.floor(Math.random() * 3) + 1; 
    self.hasWon(randomNum === activityNumber); 
}); 
+0

btw .. BoilerplateJS verwendet eine leicht modifizierte Version von [pubsub.js] (https: // github.com/federico-lox/pubsub.js) Umsetzung von Federico Lucignano hinter der Szene. – Hasith

0

Ich würde mit einer Publish-Subscribe-Bibliothek, wie Amplify aussehen. Mit dieser Technik ist es einfach für ein Modul, als Herausgeber von Ereignissen und anderen zu fungieren, um sich als Abonnenten zu registrieren, zuzuhören und auf diese Ereignisse in einer stark entkoppelten Weise zu antworten.

Da Sie Knockout bereits verwenden, könnten Sie zuerst versuchen zuerst Ryan Niemeyer knockout-postbox Plugin versuchen. Mehr Hintergrund zu dieser Bibliothek ist available here einschließlich a demo fiddle. Sie können jederzeit zu Amplify wechseln, wenn Sie es benötigen.