Parsley – #4 – Messaging

Parsley Tutorial Nummer 4: Messaging ist meiner Meinung nach eines der nützlichsten Features von parsley. Das Framework stellt die Möglichkeit bereit, global und vollständig voneinander entkoppelt Nachrichten zu versenden. Entwickelt Person A beispielsweise die Hauptnavigation, müssen von dort aus nur Nachrichten versendet werden, welcher Inhalt auf der Seite angezeigt werden soll. Person B entwickelt den ContentContainer und weiß, dass irgendwann die Nachricht “HOME” kommt. Trifft diese Nachricht ein, muss der aktuelle Inhalt ausgeblendet und der Inhalt mit dem Namen “HOME” angezeigt werden.

Für Person A ist es also vollkommen egal, was mit dieser Nachricht gemacht wird und Person B kann total egal sein, wo die Nachricht herkommt. Wichtig ist nur eins: Die Nachricht exisitiert und die Anwendung muss darauf reagieren.

Schritt 1: Versenden von Nachrichten:
Damit ein Objekt Nachrichten versenden kann, muss dem Framework mitgeteilt werden, welche Nachrichten innerhalb der Klasse für die Außenwelt bestimmt sind. Dazu definiert man einfach in einem Metatag die entsprechenden Konstanten.

package  
{
    import flash.events.Event;
    import flash.events.EventDispatcher;

    [ManagedEvents("switchLocale")]
    public class ClassA extends EventDispatcher
    {
        public function ClassA()
        {
            //...
        }
       
        public function dispatcher() : void
        {
            dispatchEvent(new Event("switchLocale"));
        }
    }
}

Jetzt leitet parsley alle Events über das MessagingFramework, die in der Klasse dispatcht werden und mit der String-Konstante übereinstimmen. Werden Events dispatcht, die nicht in der Deklaration erwähnt sich, werden sie wie normale Flash-Events behandelt und nicht weiter beachtet. In obigen Beispiel leitet das Framework also das Event “blubb” global weiter, das Event “bla” wird aber nicht weiter beachtet.

Der Lesbarkeit halber sind hier in den Beispielen Strings als Event-Types benutzt. In eigentlichen Anwendungen machen Konstanten vom Typ XYZEvent.HOME natürlich mehr Sinn.

Schritt 2: Empfang von Nachrichten:
Wieder ist zu beachten, dass das Objekt zum Context hinzugefügt wurde – denn ohne Context, keine Verbindungen.

Damit das Event verarbeitet werden kann, muss es vom gleichen Typ sein, der auch in der Funktion angegeben ist. Wird über das Framework ein LoginEvent verschickt und der Handler verarbeitet nur PageEvents, wird die Message ignoriert und nicht an die Funktion übergeben. So wird Typensicherheit sichergestellt.

Beispiel:

package  
{
    import flash.events.Event;

    public class ClassB
    {
        public function ClassB()
        {
            //...
        }
       
        [MessageHandler(selector="switchLocale")]
        public function dispatcher(event : Event) : void
        {
            //...
        }
    }
}

Kein Anmelden, einfach ausführen, was gibt es schöneres?

2 Responses to “Parsley – #4 – Messaging”

  1. [...] Funktionen des Frameworks ebenfalls mittels Metatags steuern. Beispiele für Dependency Injection, Messaging und Localisation [...]

  2. schöne, kurze artikel! würde gerne mehr davon sehen :)

Leave a Reply