0

Wie erhalte ich Informationen über die Ereignisse der untergeordneten Ansicht in der übergeordneten Ansicht?Appcelerator - Übergeordnete Ansicht benachrichtigen, wenn in der Kindansicht etwas passiert

Zum Beispiel:

Ich gehe und Argument für das Kind (Alloy.createController ('myChildView'. {Info: test}) getView()). Dann arbeite ich damit und setze eine globale Variable von falsch auf wahr (Alloy.Globals.childPrecessed = true). Danach kann ich jede Zeit mit dieser Ansicht verbringen, aber wenn ich auf eine Schaltfläche klicke, die ein Ausblenden-Ereignis auslöst, sollte ich die Informationen aus der Elternansicht verarbeiten.

Mein erster Gedanke war ich Feuer az appwide Ereignis (myChildHide), und höre es in der Elternansicht. Wenn ich es erwische, dann verarbeite ich die Info und zerstöre den Hörer ...

Ist das die beste Methode? Ich bin mir nicht sicher ...

Hat jemand bessere Lösung dafür?

Danke!

Antwort

2

Ich bin ein Fan von Event Listeners, also denke ich, dass Ihre Herangehensweise gut ist.

Was ich normalerweise tun, ist, den Ereignis-Listener zu initiieren, bevor ich es brauche, um effektiv zu sein, d. H. In der Methode, die das untergeordnete Fenster öffnet. Aber zuerst verwende ich Backbone-Ereignisse für die einfache Ereignisauslösung. Siehe Fokke Zandbergen's article for further info. Also vorausgesetzt, Sie haben einen „Dispatcher“ einrichten, dann würde ich so etwas tun:

function openChild(){ 
    dispatcher.on("child-calling", doChildsWork); 
    // ... open child view 
} 

Dann in den doChildsWork Ich würde die Event-Handler deaktivieren einmal genannt:

function doChildsWork(args){ 
    dispatcher.off("child-calling"); 
    // ... do work initiated by child view using args... 
} 

Und schließlich im Kind Ansicht (vorausgesetzt, Sie haben einen „Dispatcher“ einrichten) Sie so etwas tun würden:

function doChildsWork(){ 
    // ... Tell parent to do some work 
    dispatcher.trigger("child-calling",{test:true}); 
    // ... continue whatever is going on in child 
} 

ich diesen Ansatz viel verwenden - und es funktioniert gut :-)

/John

+0

Bitte melden Sie sich an für Fokkes Artikel. Ich würde entweder Rückruf oder controller.on/controller.trigger verwenden. – Shawn

+0

Sehr detaillierte Antwort, großer Artikel, danke, John! :) – Zoltan