Ember在应用程序路径setupController中调用应用程序路径上的操作

时间:2015-08-21 11:03:11

标签: ember.js

我已经设置了一个基本示例来说明我想要实现的目标。我在应用程序路径中使用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');以查看它。

1 个答案:

答案 0 :(得分:2)

只需在Ember.run.next中包裹发送操作:

if (someImportantVariable) {
    Ember.run.next(this, function() {
        this.send('addToSidebar');
    });    
}

确保在所有内容都正确初始化后,它将在稍后时间触发。

Working demo.