我已经设置了一个基本示例来说明我想要实现的目标。我在应用程序路径中使用setupController
,并且有一个名为addToSidebar
的操作。在setupController中我想调用操作但得到错误:
Nothing handled the action 'addToSidebar'. If you did handle the action, this error can be caused by returning true from an action handler in a controller, causing the action to bubble.
我可以在申请路线中从哪里发送行动?
代码
路由/ application.js中
Ember.Route.extend({
setupController: function(controller) {
controller.set('numbers', [1, 2]);
var someImportantVariable = true;
if (someImportantVariable) {
this.send('addToSidebar');
}
},
actions: {
addToSidebar: function() {
var controller = this.controller;
controller.get('numbers').addObject(controller.get('numbers.length') + 1);
}
}
});
application.hbs
<div class="sidebar">
Pets:
{{#each numbers as |num|}}
{{num}}
{{/each}}
</div>
<div class="mainArea">
{{outlet}}
</div>
在我的现实生活中,变量var controller = this.controller;
将由来自forfilled模型的一些更复杂的逻辑决定。
JS Bin 我已经设置了一个jsbin来显示我收到的错误:
http://emberjs.jsbin.com/pedato/edit?html,css,js,output
取消注释this.send('addToSidebar');
以查看它。
答案 0 :(得分:2)
只需在Ember.run.next
中包裹发送操作:
if (someImportantVariable) {
Ember.run.next(this, function() {
this.send('addToSidebar');
});
}
确保在所有内容都正确初始化后,它将在稍后时间触发。