[英]emberjs - Add actions to Ember.Service
我正在尝试将动作添加到Ember 1.10中的Ember.Service中,但是我不得不将_actions
别名_actions
到actions
哈希中才能使其正常工作,我是否缺少某些东西?
export default Ember.Service.extend(Ember.ActionHandler, {
actions:{
addItem: function(label) {
console.log(label);
}
},
setup: Ember.on('init', function(){
this._actions = this.actions;
})
});
查看余烬源, triggerEvent
方法查询_actions
哈希值:
if (handler._actions && handler._actions[name]) {
if (handler._actions[name].apply(handler, args) === true) {
eventWasHandled = true;
} else {
return;
}
}
我想我缺少了一些东西。
动作从模板冒泡到视图中,然后是控制器,然后是路由。 除非您手动执行myService.send('someAction')
,否则任何操作都不会到达服务。
代替服务操作,请使用服务方法。
只需在服务上声明一个方法,然后例如在控制器中执行:
myService: Ember.inject.service(),
actions: {
someAction: function(arg) {
this.get('myService').someMethod(arg);
}
}
作为一种更简单的解决方案并回答dagda1,您可以通过在模板操作上设置目标来跳过中间操作。 如果您有一个支持服务的组件,并且可能需要在各种实例中使用相同的操作,并且希望避免不得不多次在模板和每个相应的组件中声明该操作,这将非常有用。
在上下文中注入服务:
myService: inject.service()
在模板中定位服务:
{{action 'myServiceAction' target=myService}}
然后,这将针对服务上的操作哈希:
actions: {
myServiceAction() {
...
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.