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
助手不会反弹操作,而只是传递它。
我有一个非常简单的组件,它有两个动作,启动和停止。单击按钮时会触发这些。第一个动作冒泡到路由并按预期工作,但是第二个动作在组件中触发,但从未到达路由。
我刚开始玩 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
助手不会反弹操作,而只是传递它。