Frage

Ich arbeite ein paar einfache Grafik-Software zu entwickeln, die sowohl in der Schaukel und GWT umgesetzt werden muss. Auf der GWT Seite werde ich GWT-g2d für die Leinwand verwenden. Ich hatte gehofft, eine EventBus über beide Implementierungen verwenden einen Teil der Software zu vereinfachen.

Mein Verständnis ist, dass es so etwas wie dies sein sollte:

  1. Instantiate EventBus
  2. Instantiate Eltern Widget sinkt die Ereignisse, die Sie für den EventBus wollen (Mouseover oder rpc Rückruf, zum Beispiel)
  3. Set EventBus für Ereignisse aus den Eltern Widget zu hören.
  4. Instantiate Kind-Widgets, die mit dem EventBus registrieren sollten die Hörer es hat (Müssen sie Ereignisse registrieren sie feuern könnten?)
  5. Wenn die EventBus ein Ereignis empfängt, sollte es eine Entscheidung über das Ereignis machen und dann auf dieser Entscheidung handeln, ob das bedeutet, es zu ignorieren, die Änderung den Ereignistypen, oder einfach nur um es zu all anwendbaren Kind-Widgets weiterzuleiten.

Ist dies in der Regel, wie es funktionieren soll? SimpleEventBus ist immer noch irgendwie neu, und ich kann nicht viel über Web finden, wie es wirklich nutzen.

War es hilfreich?

Lösung

Ein SimpleEventBus bietet die sehr grundlegende Funktionalität, um eine Sammlung von Handler von Speichern und Aufrufen event.dispatch () mit allen relevanten Behandlungsroutinen geeignet, wenn. Ich würde nicht sagen, dass Sie von der übergeordneten Widget „Set EventBus für Veranstaltungen zu hören“. Die SimpleEventBus hat kein Konzept einer „Eltern“. Stattdessen übergeben Sie einen Verweis auf Ihren SimpleEventBus um. Dann jeder Objekt „Feuer ein Ereignis“ mit dem SimpleEventBus.fireEvent Methode. Es gibt keine Hierarchie.

Und jeder Objekt kann für diese Ereignisse mit SimpleEventBus.addHandler () hört. Dies ist am ehesten Ihrer # 4 - addHandler nimmt eine Typ von Ereignis und einem Handler, so, wenn diese Art von Ereignis zu fireEvent übergeben wird (durch etwas in Ihrer App), wird dieser Handler die übergeben werden Veranstaltung. Beachten Sie, dass der Event ist, was die Prozedur aufruft, nicht der EventBus! Der EventBus ruft nur event.dispatch (theHandler), und der Programmierer der Veranstaltung ist verantwortlich für die ordnungsgemäße Funktion in theHandler aufrufen. Ihre # 5 ist ungenau, zumindest für ein SimpleEventBus - SimpleEventBus inspiziert nicht die Ereignisse überhaupt, außer die Handler Aufruf zu sehen. Es weiß nicht, über alle Kind-Widgets oder jede App-Logik und ändert sich nie die Art eines Ereignisses.

Ihre Logik zu sehen, welche Region ausgewählt wurde würde in einem EventBus nicht angemessen sein - stattdessen würden Sie einen Handler machen, die die Logik und Streams für ClickEvents tut. Dann könnte der Handler der ausgewählte Region sagen, dass es direkt gewählt wurde, oder Sie konnten Ihre eigene RegionSelectionEvent schaffen, dass man entlang einer EventBus abfeuern konnte, und dann alle Regionen informiert werden kann, dass ein RegionSelection aufgetreten ist, und Logger konnte erhalten eine Benachrichtigung oder Ihrem Server Monitor kann die Benachrichtigung erhalten und den Chef informieren, dass jemand eine Region ausgewählt, oder was auch immer. Wenn Sie nur eine andere brauchen, um eine Region ab und wählen Sie ein EventBus ist übertrieben.

Auf der anderen Seite, so etwas wie ein „Resize“ Ereignis sehr viel Sinn macht, da alle Ihre Widgets benötigen könnten, darüber wissen.

Andere Tipps

Soweit ich das GWT EventBus verstehen, ist es für Ereignisse zu verstehen, die Anwendung breit sind (man denke an „system Objekt chanded Eigenschaft x y“, etwas, das zuhört zu diesem besonderen Ereignis auf sie wirken kann). Dies hilft Ihnen, Ihre Anwendungslogik zu trennen.

Sie wollen wahrscheinlich keine UI Ereignisse in sie feuern: Ihre Eltern-Widgets den Handler implementieren können, oder Sie können nur anonyme Instanzen verwenden

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top