gpt4 book ai didi

javascript - Marionette 中的僵尸景观

转载 作者:行者123 更新时间:2023-12-03 10:44:00 24 4
gpt4 key购买 nike

JS 控制台错误:

未捕获的ViewDestroyedError: View (cid:“view351”)已被销毁,无法使用。 backbone.marionette.js?body=1:1715

代码:

initialize: (options) ->
HWAs = @model.get('homework_assignments')
@collection = new App.Collections.HomeworkAssignments(HWAs)
@collection.on "sync", =>
@render()
@collection.fetch()

如果我这样做,我会得到僵尸 View :

  1. 打开使用上述代码的页面
  2. 点击浏览器的后退按钮
  3. 点击指向使用上述代码的 View 的链接

知道为什么会发生这种情况吗?

最佳答案

您没有给我们太多可供使用的代码,但这是我的最佳猜测。

每次实例化此类的 View 时,您都会将集合绑定(bind)到此 View 类。

@collection.on "sync", =>
@render()

但是,当此类的 View 被销毁时,它不会清除到 @collection 的绑定(bind)。 ,因为绑定(bind)位于 collection ,而不是 view 。因此,现在每次您同步集合时,它都会尝试对自上次页面重新加载以来您创建并绑定(bind)到集合的该 View 的每个实例调用刷新,其中一些实例显然已失效。它们可能已经死了,因为您重新渲染了父级、区域或包含它们的其他内容,但如果没有更多代码,我不能 100% 确定发生了什么。

最好的解决方案可能是在您的 View 中包含清理功能。

onBeforeClose: () ->
@collection.off("sync", @render())

您可能还需要将同步函数更改为以下语法:

@collection.on("sync", @render())

我不确定主干是否会识别调用 @render() 的匿名函数作为 @render() 的同义词函数本身。无论哪种方式,您的匿名函数都会调用 @render()函数只会引入不必要的复杂性。

关于javascript - Marionette 中的僵尸景观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28640734/

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