繁体   English   中英

emberjs-向Ember.Service添加操作

[英]emberjs - Add actions to Ember.Service

我正在尝试将动作添加到Ember 1.10中的Ember.Service中,但是我不得不将_actions别名_actionsactions哈希中才能使其正常工作,我是否缺少某些东西?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM