【问题标题】:Ember.js action bubbling but controller undefined in actionEmber.js 动作冒泡但控制器未定义
【发布时间】:2016-09-18 17:53:14
【问题描述】:

我有一条带有afterModel 钩子的路由。

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') 未定义。为什么?

如何更改此设置以使冒泡操作更新应用程序控制器属性?

【问题讨论】:

  • 在所有模型钩子都解决之后,控制器才会被设置。
  • 我会说将您的状态相关属性保留在控制器中。在您的情况下,如果您在路由中更改someProp,那么除非它通过 setupController,否则它不会反映在模板中。

标签: ember.js event-bubbling ember-router ember-controllers


【解决方案1】:

感谢@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);
  }

那么一切都应该正常。

【讨论】:

  • 我建议调用this._super(...arguments);而不是设置模型,这样更不容易出错。
猜你喜欢
  • 2012-08-23
  • 2011-10-05
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
相关资源
最近更新 更多