ExtJS 4.1 Rufen Sie einen Controller von einem anderen

8

Hinweis: Ich bin ein totaler Ignorant bezüglich Javascript.

Ich habe meine ExtJS 4.1 MVC App in mehrere Controller aufgeteilt:

%Vor%

Ich möchte auf ein "Ereignis" antworten, nicht auf ein DOM-Ereignis , sondern auf ein Ext.form.action.Submit.success -Ereignis, indem Funktionen in beide my Auth und% co_de aufgerufen werden % Controller. Der zusammengefasste Code für den ersten Teil ist hier:

%Vor%

Das funktioniert, fühlt sich aber falsch an. Gibt es einen richtigen Weg, dies zu tun? Es scheint, als ob ich ein einzigartiges Ereignis auslösen sollte, das von beiden Controllern gehört wird, aber ich kann nicht verstehen, wie man das mit Quiz macht. Irgendeine Anleitung?

Danke! Ich bin wirklich dankbar für all die großartigen Ideen und Ratschläge.

    
justinzane 22.08.2012, 03:24
quelle

5 Antworten

6

Es macht Sinn für mich, ein benutzerdefiniertes Ereignis aus dem Formular auszulösen und es einfach in beiden Controllern anzuhören, wie Sie es hier gesagt haben:

  

Es scheint, als müsste ich ein einzigartiges Ereignis abfeuern, das von beiden gehört wird   Controller

%Vor%

Dann können Sie in jedem Ihrer Controller > mit Controller wie folgt anhören:

%Vor%

Und fügen Sie dann Ihrem Quiz -Controller dasselbe hinzu:

%Vor%

Ich habe diesen Ansatz in 4.1.0 und 4.1.1 erfolgreich angewendet.

    
Geronimo 22.08.2012, 04:18
quelle
3

Es sollte wirklich

sein %Vor%

oder etwas in dieser Richtung (um eine korrekte this -Referenz zu haben, die auf den 'Eigentümer' der Methode zeigt, das Controller-Objekt)

Warum verwenden Sie diese unorthodoxe Methode, um die Methode des aktuellen Controllers aufzurufen? Setzen Sie einfach den scope für den Erfolgsrückruf und rufen Sie dann this.finishLogin () auf.

%Vor%

Sie können auch eine andere Controller-Instanz mit Controller#getController abrufen.

%Vor%

Wenn Ihre Controller-Methoden nicht voneinander abhängig sind, können Sie beide dazu bringen, das gleiche Ereignis zu hören.

Eine andere Lösung besteht darin, ein benutzerdefiniertes Ereignis auszulösen, sobald die Anmeldung abgeschlossen ist. Sie könnten dies für das Anwendungsobjekt

tun %Vor%

und in der Init-Methode Ihres Controllers:

%Vor%

Bitte beachte, dass du diese Ereignisse nicht über Controller#control anhören kannst - siehe den Blogeintrag von Alexander Tokarev für einen Patch zu Ext, um dies zu erreichen.

    
mistaecko 22.08.2012 04:04
quelle
2

Es gibt keine Standardmethode, um Ereignisse zwischen Controllern auszulösen, aber es ist mit einigen benutzerdefinierten Hacks möglich. Siehe meinen letzten Blogeintrag .

    
Alex Tokarev 22.08.2012 03:38
quelle
0

Ich habe auch nach diesem gesucht und alles, was Sie brauchen, ist Asanda.app.getController ('Quiz'). setupAssignment () ;, wobei Asanda der Name Ihrer App ist

    
Asanda Lamba 07.10.2015 08:47
quelle
0

Sie sollten einen MessageBus verwenden, wenn Sie Ereignisse zwischen Controllern senden müssen:

%Vor%

speichert den Nachrichtenbus in einer globalen Variablen

%Vor%

Wo müssen Sie Veranstaltungen senden:

%Vor%

Wo Sie Veranstaltungen erhalten müssen:

%Vor%     
Mattex83 07.10.2015 12:50
quelle

Tags und Links