我正在 Backbone.js 创建一个应用程序,它有一个父视图和多个子视图。子视图包含它们监听并执行功能的链接。
父视图存储所有子视图的列表。在渲染函数中,计算完自己的 html 后,它会执行以下操作:
$(this.el).html(html);
for (var i = 0; i < this.views.length; i++){
$('.children', this.el).append(this.views[i].render().el);
}
回答:问题是我在渲染期间创建链接。 IE。在第一次渲染(从 init 调用)时,事件成功绑定到链接。但是,由于所有后续的 render 调用都会重新创建整个元素,因此新链接没有绑定到它的处理程序。这是通过添加 @Tom Tu 解决方案解决的this.delegateEvents()
到渲染
您可能正在使用 jqueryremove
函数某处从视图中删除子视图 - 它会自动删除绑定到元素(this.el)的所有事件 - 在events
目的。您可以使用this.delegateEvents()
渲染模板后渲染子视图中的方法以重新绑定中设置的事件委托events
对象或使用jquerydetach
方法而不是从 DOM 中删除元素而不删除事件绑定(link http://api.jquery.com/detach/). The delegateEvents
该方法相当昂贵,因此我推荐detach
如果您正在渲染长列表的子视图,则删除要重用的元素的方法 - 如果它只是几个视图,则无关紧要。
另一种可能性是您已设置events
对象错误 - 很难从提供的代码量中看出,但我打赌第一个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)