【问题标题】:Catch All Action Handler捕获所有动作处理程序
【发布时间】:2014-01-08 06:32:39
【问题描述】:

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

我们通常像这样在控制器中定义动作:

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

有没有办法定义一个捕获所有动作处理程序,像这样(假设):

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

这类似于我认为已经实现的 embers catch all route,尽管我还没有尝试过。

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

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

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

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    关于控制器、视图和路由的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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2014-09-01
      相关资源
      最近更新 更多