Ember.js (v2.4.5) 组件没有放弃第二个动作

Ember.js (v2.4.5) component isn't passing up second action

我有一个非常简单的组件,它有两个动作,启动和停止。单击按钮时会触发这些。第一个动作冒泡到路由并按预期工作,但是第二个动作在组件中触发,但从未到达路由。

我刚开始玩 Ember,但我假设组件可以执行多个操作?

控制台中没有任何错误,按钮只是不执行任何操作,并且从不显示路由的控制台日志。

组件操作

actions: {

  start() {
    console.log('component start called');
    this.sendAction('start', this.get('item'));
  },

  stop() {
    console.log('component stop called');
    this.sendAction('stop', this.get('item'));
  }
}

路由操作

actions: {
    start (server) {
        console.log('route start called');
        server.set("settings.amazonTask", 'start');
        server.save();
    },

    stop (server) {
        console.log('route stop called');
        server.set('settings.amazonTask', 'stop');
        server.save();
    }
}

模板

<button type="button"
        class="btn btn-default btn-sm" {{action "start"}}>
    Turn on
</button>


<button type="button"
        class="btn btn-default btn-sm" {{action "stop"}}>
    Turn off
</button>

您必须将操作交给您的组件:

{{my-component start=(action 'start') stop=(action 'stop')}}

然后你可以用 sendAction 调用。

但我强烈建议使用新语法并直接访问 attrs 对象上的操作。这更清楚,也清楚地说明了发生了什么:

this.attrs['start'](this.get('item'))

实际上 action 助手只是从 actions 对象获取一个动作并将其绑定到当前上下文。其结果可以传递给组件,然后在您执行 action 帮助器的上下文中从那里调用。

请注意,在已创建的操作上调用 action 助手不会反弹操作,而只是传递它。