2016-09-18 4 views
0

Ich habe eine Route, die einen afterModel Haken hat.Ember.js Aktion sprudelt aber Controller undefiniert in Aktion

afterModel: function(model, transition){ 
    transition.send('doInAppRoute'); 
} 

Ich habe eine Aktion in meiner Anwendung Route:

doInAppRoute: function(){ 
    var controller = this.get('controller'); 
    controller.set('someProp', true); 
} 

Wenn ich die Aktion Blase von der Route mit dem afterModel Haken lassen, erhalte ich die folgende Fehlermeldung.

Error while processing route: embed Cannot read property 'set' of undefined TypeError: Cannot read property 'set' of undefined

Wenn ich einen Aktionsaufruf zu doInAppRoute in der Anwendungsvorlage setzen, läuft alles wie erwartet.

Wenn der Aktionsaufruf zu doInAppRoute Blasen, this.get('controller') in meiner Anwendungsroute ist undefiniert. Warum?

Und wie kann dies geändert werden, so aktualisiert die bubbled Aktion die Application Controller-Eigenschaft?

+0

Der Controller wird erst eingerichtet, nachdem alle Modellhacken aufgelöst wurden. –

+0

Ich würde sagen, behalten Sie Ihre staatlichen Eigenschaften in Controller. In Ihrem Fall, wenn Sie 'someProp' in route ändern, wird es in der Vorlage nicht reflektiert, es sei denn, es passiert setupController. – kumkanillam

Antwort

0

Dank @torazaburo für die Führung in die richtige Richtung.

Das habe ich gemacht.

someProp auf einen Anfangswert in der Anwendungsroute setzen.

someProp: false, 

Dann in der die Anwendung Route Aktion so etwas wie:

doInAppRoute: function(){ 
    this.set('someProp', true); 
} 

Und dann in der Anwendung Route setupController tun:

setupController: function(controller, model){ 
    controller.set('someProp', this.get('someProp')); 
    controller.set('model', model); 
    } 

Dann sollte alles funktionieren.

+0

Ich empfehle den Aufruf von 'this._super (... arguments);' Anstatt das Modell zu setzen, ist es weniger anfällig für Fehler. – locks