gpt4 book ai didi

javascript - 为什么在 Backbone.js 中第二次渲染后事件没有触发?

转载 作者:可可西里 更新时间:2023-11-01 02:02:24 25 4
gpt4 key购买 nike

我正在 Backbone.js 中创建一个应用程序,它有一个父 View 和多个 subview 。 subview 包含它们收听并执行功能的链接。

父 View 存储所有 subview 的列表。在渲染函数中,在计算完自己的 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 调用)上,事件成功绑定(bind)到链接。但是,由于所有后续的 render 调用都会重新创建整个元素,因此新链接没有绑定(bind)处理程序。这是通过将 this.delegateEvents() 添加到渲染中的@Tom Tu 解决方案解决的

最佳答案

您可能正在某处使用 jquery remove 函数从 View 中删除 subview - 它会自动删除绑定(bind)到元素 (this.el) 的所有事件 - 在 events< 中设置 对象。您可以在渲染模板后在 subview 的渲染中使用 this.delegateEvents() 方法重新绑定(bind) events 对象中设置的事件委托(delegate)或使用 jquery detach 方法而不是从 DOM 中删除元素而不删除事件绑定(bind) (link)。 delegateEvents 方法非常昂贵,因此我建议使用 detach 方法来移除要重用的元素,如果您正在渲染长长的 subview 列表 - 如果它只是无关紧要几个观点。

另一种可能性是您设置了错误的 events 对象 - 从提供的代码量很难判断,但我敢打赌第一个。

关于javascript - 为什么在 Backbone.js 中第二次渲染后事件没有触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com