有没有办法让catch 所有操作处理程序?
问题是,从组件发送的Ember.TargetActionSupport
' triggerAction
不会冒泡。
因此,当我有嵌套组件时,当我从子组件发送一个动作时,父组件捕获它,但控制器没有捕获它。
所以我想做一个"动作代理" - 父组件捕获操作并发送它的副本。这种方法有效,但是父组件不知道它的孩子会采取什么行动,所以我需要一个"赶上所有"处理
答案 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感到满意:)