Frage

Ich habe ein solches Problem: Ich habe 2 benutzerdefinierte Komponenten, die ihre eigenen Verschachtelungshierarchie haben ... Eines ist für andere Behälter. Ich habe zu „machen sie“ miteinander. Die Art, wie ich versuche zu erreichen, dass globale Ereignisse verwendet (eine Seite feuert und der andere holt):

Application.application.addEventListener("Hello", function (data:Event):void{
        // .. some actions
    });

//and
Application.application.dispatchEvent(new Event(Hello));

Alles ist ziemlich gut, aber es gibt ein Ding .. wenn ich versuche, um das Ereignis zu fangen, kann ich nicht die Klasse zugreifen, die es zu kontrollieren. Z.

  1. Container löst das Ereignis.
  2. Child caughts es.
  3. sollte dann die Verbindung zwischen Behälter angelegt und das Kind.

Aber, das einzige, was ich acheive könnte einen Verweis auf die Container in der DynamicEvent passiert. Gibt es eine Chance, dass es das Kind auf der Ereignishandler-Funktion zugreifen. Oder vielleicht gibt es elegantere Weg, um dieses Problem zu lösen ...

Jede Hilfe würde greately geschätzt werden:)

War es hilfreich?

Lösung

In den meisten Fällen entweder Ziel oder current geben Sie auf die Komponente zugreifen, die das Ereignis feuert.

http://livedocs.adobe.com/flex /3/langref/flash/events/Event.html http://livedocs.adobe.com/flex/ 3 / langref / flash / events / event.html # current http://livedocs.adobe.com/flex/ 3 / langref / flash / events / event.html # Ziel

Doch mit Ihrem Ansatz, Sie das Ereignis aus der Top-Level-Anwendung Brennen; weder aus Ihren verschachtelten Komponenten. Das erscheint mir als ungewöhnlich.

Ich sehe Sie haben eine Hierarchie wie folgt aus:

Anwendung

--- Container1

------- Container2

Ich würde empfehlen, das Ereignis aus container2 Brennen und für sie in container1 hören.

Ihr Dispatch Code in Container2 wird so etwas wie dies:

this.dispatchEvent(new Event('myCustomEvent'));

In container1 Sie für den Fall, so etwas wie dies hören können:

container2.addEventListener('myCustomEvent', onMyCustomEvent);

Wenn Sie benötigen individuelle Ereignisdaten zu Ihrem Ereignis hinzuzufügen; Sie können eigene Ereignisklasse und Zusatzdaten erstellen. Haben Sie einen speziellen Anwendungsfall haben für die Ereignisse aus dem Anwendungscontainer Brennen? Ich würde gerne hören.

Andere Tipps

Wir haben getan, wie Flextras sagt, benutzerdefinierte Ereignisse erstellen, in unserem Fall Cairngorm Events und tatsächlich Daten hinzugefügt, ein Verweis auf den Container, den Sie wollen das Ereignis Responder zu antworten. Ich habe wirklich nicht, wie es so zu tun, obwohl, wie in sehr seltenen Fällen die Behälter nicht in einem Zustand sein könnten, wo es mit interagiert werden kann. In unserem Fall haben wir eine Menge von dynamisch geladenen Module, die kommen und gehen können, und dann Wham! Plötzlich Sie die flex Äquivalent eines Null-Zeiger Ausnahme erhalten. Aber das ist der Preis, den Sie zahlen, wenn Sie stark asynchron sind, eine Menge von null Prüfung und Ausnahme zu kontrollieren.

Die Art des Event-Managements Sie suchen ist gut ausgestattet mit einem abhängigkeits Injection-Framework gelöst wie Mate- oder Swiz . Grundsätzlich sind Sie zu fangen Veranstaltungen auf globaler Ebene benötigen, und dann verschiedene Aktionen in Ihrer Anwendung in verschiedenen Komponenten auf diesen Ereignisse auszuführen.

Kamerad hat das Konzept eines EventMap, dass Ihnen bestimmte Ereignisse zur Karte ermöglicht mit Ihren Ansichten in verschiedener Art und Weise zu interagieren. Sie können die Werte in den Blick Eigenschaften oder Methoden aufrufen innerhalb einer Ansicht injizieren, wenn bestimmte Ereignisse auftreten.

Wenn Sie möchten, gehen Sie nicht mit einem Rahmen, Blick auf den Blasen Eigenschaft der Event-Klasse. Wenn Sie die Event-Klasse außer Kraft setzen ein benutzerdefiniertes Ereignis zu erstellen, stellen Sie den Standardwert von Blasen auf true . Auf diese Weise Ihre Veranstaltungen zu sprudeln bis zu der Hauptanwendung fortsetzen werden, unabhängig davon, wie tief sie in Ihrer Anwendung verschachtelt sind.

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