Backbone.js - 为什么我的delegateEvents选择器不起作用?

Nat*_*ley 4 backbone.js

我有一个包含相同类型的嵌套视图的视图.因此,我的delegateEvents选择器需要注意只选择顶级元素而不是子视图中的元素.

在我的视图上下文中使用的以下代码成功选择了我想要绑定的元素:

var $link = this.$('> .node > .indent > a'); // success!
Run Code Online (Sandbox Code Playgroud)

delegateEvents使用相同选择器的对象根本不会挂起事件:

events: {
    'click > .node > .indent > a': 'toggleGrouped' // fail :(
}
Run Code Online (Sandbox Code Playgroud)

请注意,我已经确认事件连接可以与其他更简单的选择器一起使用,因此它不是渲染的问题.

我究竟做错了什么?

Pau*_*aul 6

它可能与jQuery delegate不喜欢> .node > .indent > a选择器的事件有关.

您可以通过在视图的render方法中添加以下代码行来确认这一点.(这是Backbone正在做的事情delegateEvents)

$(this.el).delegate('> .node > .indent > a', 'click', this.toggleGrouped);
Run Code Online (Sandbox Code Playgroud)

如果它仍然不起作用那么问题与delegate事件有关,而不是骨干.

解决方法是在render方法中完成所有渲染后绑定到click事件.

this.$('> .node > .indent > a').click(this.toggleGrouped);
Run Code Online (Sandbox Code Playgroud)

您还必须绑定toggleGroupedinitialize方法中的上下文,因为它不再自动绑定.

initialize: function() {
  _.bindAll(this, 'toggleGrouped');
}
Run Code Online (Sandbox Code Playgroud)