抓住所有动作处理程序

时间:2014-01-08 06:32:40

标签: ember.js

现在,这是一个从this演变而来的问题。那里有更多的信息,但我想,最好问一个直接的具体问题。所以这就是:

我们通常在控制器中定义操作,如下所示:

var FooController = Ember.Controller.extend({
    actions: {
        login: function() {
        }
    }
});

有没有办法定义一个catch all动作处理程序,如此(假设):

actions: {
    login: function() {
    },
    *: function(actionName, paramArray) {
    }
}

这类似于我认为已实施的余烬catch all route,但我还没有尝试过。

我需要这个,因为我的Ember.Component使用{{partial}}帮助器呈现用户提供的partial template。此部分可能在其中指定了{{action}}。这些操作不会冒泡到调用控制器或路由,并在组件内丢失。第4段docs中提到了这一事实。

如果可以捕获所有操作,我的组件可以实现它并使用以下内容将操作发送回调用方:

actions: {
    *: function(actionName, paramArray) {
        this.sendAction(actionName, paramArray)
    }
}

1 个答案:

答案 0 :(得分:2)

控制器,视图和路由上的actions哈希周围的功能由动作处理程序mixin [1]提供。如您所见,它注入send(actionName)方法并使对象能够接收操作。您现在可以轻松覆盖此函数并捕获所有操作,而不是在actions哈希中查找它 - 这就是实现的功能。

[1] https://github.com/emberjs/ember.js/blob/v1.3.0/packages/ember-runtime/lib/mixins/action_handler.js#L8