2016-09-18 82 views
0

我有一個路線,有一個afterModel掛鉤。Ember.js動作冒泡,但控制器未定義在行動

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

我在我的申請途徑的作用:

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

當我允許與afterModel鉤路由的行動泡沫,我碰到下面的錯誤。

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

如果我把一個行動號召doInAppRoute在應用程序模板,運行正常的一切。

如果動作調用doInAppRoute氣泡,this.get('controller')在我的應用程序路由中是未定義的。爲什麼?

如何更改這個冒泡操作更新應用程序控制器屬性?

+0

控制器將在所有模型掛鉤解決後才能設置。 – 2016-09-18 18:56:37

+0

我會說在控制器中保持你的狀態相關的屬性。在你的情況下,如果你在路由中改變'someProp',那麼它將不會反映到模板中,除非它通過setupController。 – kumkanillam

回答

0

感謝@torazaburo帶領我走向正確的方向。

這就是我所做的。

someProp設置爲應用程序路徑中的初始值。

someProp: false, 

然後在應用路由操作做這樣的事情:

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

然後在應用路線setupController做:

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

然後,一切都應該工作。

+0

我建議調用'this._super(... arguments);'而不是設置模型,它不太容易出現錯誤。 – locks