2016-09-18 85 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