我有一个包含相同类型的嵌套视图的视图.因此,我的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)
请注意,我已经确认事件连接可以与其他更简单的选择器一起使用,因此它不是渲染的问题.
我究竟做错了什么?
它可能与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)
您还必须绑定toggleGrouped
initialize方法中的上下文,因为它不再自动绑定.
initialize: function() {
_.bindAll(this, 'toggleGrouped');
}
Run Code Online (Sandbox Code Playgroud)