emberjs-向Ember添加操作.服务



我正在尝试向Ember添加操作。Ember 1.10中的服务,但我不得不将_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;
  })
});

查看ember源,triggerEvent方法查询_actions hash:

if (handler._actions && handler._actions[name]) {
  if (handler._actions[name].apply(handler, args) === true) {
    eventWasHandled = true;
  } else {
    return;
  }
}

我想我错过了什么。

Actions从模板进入视图,然后进入控制器,然后进入路由。除非手动执行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() {
    ...
  }
}

最新更新