恩伯:所有动作处理程序?

时间:2014-05-15 12:37:18

标签: javascript ember.js

有没有办法让catch 所有操作处理程序?

问题是,从组件发送的Ember.TargetActionSupport' triggerAction不会冒泡。 因此,当我有嵌套组件时,当我从子组件发送一个动作时,父组件捕获它,但控制器没有捕获它。

所以我想做一个"动作代理" - 父组件捕获操作并发送它的副本。这种方法有效,但是父组件不知道它的孩子会采取什么行动,所以我需要一个"赶上所有"处理

1 个答案:

答案 0 :(得分:0)

我深入研究了ember源并找到了答案。这可能很有用。

组件继承自View。事实上,它是一个简单的视图,充当自身的控制器。 https://github.com/emberjs/ember.js/blob/v1.5.0/packages/ember-views/lib/views/component.js#L102

Ember.Component = Ember.View.extend(Ember.TargetActionSupport, Ember.ComponentTemplateDeprecation, {
  init: function() {
    this._super();
    set(this, 'context', this);
    set(this, 'controller', this);
  },

set(this, 'controller', this)使组件被隔离。 因此,要利用组件绑定和隔离的自我控制,但为了使其对操作保持透明,您应该使用具有自我上下文的视图:

App.MyTransparentComponent = Ember.View.extend
    init: ->
        @_super()
        @set('context', @)

事实上,你可以使用Component的所有代码制作一个Mixin,但是使用这个初始化代码并对这个很酷的stuf感到满意:)