Ember.js(v2.4.5)组件不是't错过第二个动作

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

本文关键字:错过 第二个 v2 js 组件 Ember      更新时间:2023-09-26

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

我刚开始玩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帮助程序不会反弹该操作,而只是传递它。