【问题标题】:Ember: all actions handler?Ember:所有动作处理程序?
【发布时间】:2014-05-15 12:37:17
【问题描述】:

有没有办法让 catch all 动作处理程序?

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

所以我想创建一个“动作代理”——父组件捕获动作并将其发送出去。此方法有效,但父组件不知道它的子组件将执行哪些操作,因此我需要一个“全部捕获”处理程序

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

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

    组件继承自 View。实际上,它是一个简单的 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', @)
    

    事实上,你可以用组件的所有代码制作一个 Mixin,但是有了这个初始化代码,你就会对这个很酷的东西感到满意:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多