【问题标题】:Event delegation for target目标的事件委托
【发布时间】:2012-11-02 19:21:49
【问题描述】:

在下面的代码中,我的 click 事件委托和视图层次结构中的所有三个 'click' 处理程序都会被触发。

但是,我还想在我的整个视图层次结构中触发 'edit''edit' 只是我的 'child' 视图中元素的目标。

模板

<script type="text/x-handlebars">
  {{#view App.GrandparentView}}
    {{#view App.ParentView}}
        {{#view App.ChildView}}
           <span {{action "edit" target="view"}}>Click Me</span>
        {{/view}}    
    {{/view}}
  {{/view}}
</script>

JavaScript

App.GrandparentView = Ember.View.extend({
  click: function() {
    console.log('Grandparent Click Fired!');
  },
  edit: function () {
   console.log('GrandParent edit fired');        
  }
});
App.ParentView = Ember.View.extend({
  click: function() {
    console.log('Parent Click Fired!');
  },
  edit: function () {
    console.log('Parent edit fired');        
  }

});
App.ChildView = Ember.View.extend({
  click: function() {
    console.log('Child Click Fired!');
  },
  edit: function () {
    console.log('Child edit fired');        
  }

});​

有没有办法在视图层次结构中委托目标处理程序?我想做的是:

App.ChildView = Ember.View.extend({
  click: function() {
    console.log('Child Click Fired!');
  },
  edit: function () {
    console.log('Child edit fired');        
    this.get('parentView').edit(); //DO NOT WANT TO DO THIS.
  }
});​

这里以jsFiddle 为例进行测试。

【问题讨论】:

  • 如果您提供 JSFiddle,请提供一个实际运行的。提供小提琴的目的不仅仅是查看代码,而是实际使用它。如果我必须在小提琴中设置 Ember,它就达不到目的。
  • 当然,我的错。重点始终是提供一个有效的 jsFiddle。我自己玩小提琴。出于某种奇怪的原因,资源被删除了。我现在已经更新了。

标签: ember.js


【解决方案1】:

这看起来与您在一周前发布的问题相同。据我所知,ember 中没有实现这样的功能。事件传播到视图层次结构,但操作名称丢失,并触发默认的click 处理程序。

我发现的唯一解决方法是重新打开 Ember.View 类本身,并像这样覆盖点击处理程序:

Ember.View.reopen({
  click: function(event){
    if(event.view !== this && this[event.actionName]){
        return this[event.actionName](event);
    }
  }
})

在此处查看小提琴:

http://jsfiddle.net/Sly7/zZyCS/

【讨论】:

  • 我看到你在这里做了什么。我期待这会得到支持。
  • 对于 Ember 是否应该自然支持这一点有任何想法吗? @sly7_7
  • 查看来自@joliss 的评论:stackoverflow.com/questions/12918112/…
猜你喜欢
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
相关资源
最近更新 更多