我正在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在第一个渲染(从初始化中被称为)事件成功地绑定到链接。但是,由于以下所有渲染重新创建整个元素的呼叫,新链接没有绑定的处理程序。这是通过添加的@TOM TU解决方案解决的 this.delegateEvents() 渲染

有帮助吗?

解决方案

您可能正在使用jQuery remove 函数以从视图中删除子视图的某个地方 - 它会自动删除所有绑定到元素(this.el) - 设置的事件 events 目的。您可以使用 this.delegateEvents() 渲染模板以重新启动事件代表的渲染方法 events 对象或使用jQuery detach 取而代之的是从DOM中删除元素而无需删除事件绑定(关联)。这 delegateEvents 方法很昂贵,因此我建议 detach 如果您要渲染一长串子视图列表,则要删除要重复使用的元素的方法 - 如果只是几个视图,则无关紧要。

其他可能性是您设置了 events 对象错误 - 从提供的代码数量中很难分辨,但我敢打赌第一个代码。

其他提示

一个非常普遍的挑战。对于这个问题的未来发现者,这是一篇关于视图渲染的精彩文章:

您只需要确保派遣委托人即可在任何时间运行。而且由于Backbone的设置呼叫delegateevents已经可以看起来像这样...

http://ianstormtaylor.com/rendering-views-in-backbonejs-isnt-always-simple/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top