Backbone事件未绑定到DOM元素。

5
在我的一个视图中,我有以下内容:
events: {
    'click .tab': 'doSomething',
},

那么:

doSomething: function(){
    ...
},

这是我观点中经常出现的一种结构,但由于某种原因,在此视图中单击未触发“doSomething”函数。

元素何时绑定到事件上?

有什么调试提示吗?

2个回答

10

链接到fiddle:http://jsfiddle.net/7xRak/

省略选择器会导致事件绑定到视图的根元素 (this.el)。

如果你的 class="tab" 是视图的DOM元素,即 this.el,则应该绑定事件为

events : {
  'click' : 'dosomething'
}

对于像 this.el 中的内部元素,可以这样处理:

<div class="tab">
     <span class="inner"></span>
</div>

那么您应该绑定事件为:

  events : {
      'click' : 'dosomething'
      'click .inner' : 'onInnerClick'
    }

文档: http://backbonejs.org/#View-delegateEvents


3
我很清楚上面展示的内容,这正是我要表达的。但我想说的是,出于某些原因,这种模式不起作用,因此有什么方法可以调试事件委托呢? - captDaylight

7

1
嗯,我刚试了一下,在渲染之前调用this.delegateEvents(),但它仍然没有绑定事件。另外,在初始化或渲染中,我也没有更改this.el。唯一有效的方法是在初始化内调用var that = this; this.$('.tab').on('click',function(){that.doSomething();}); 但这感觉不太合适... - captDaylight
我没有把$el或el搞乱,但是将delegateEvents添加到我的渲染中修复了事件绑定。 - Duke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接