【发布时间】:2013-03-20 00:12:01
【问题描述】:
如果您在开发工具中查看 ToDo 应用程序,每次创建新的 ToDo(model) 时都会在 AppView 中创建一个新的 ToDoView。但我没有看到 ToViews 的“集合”。我问这个是因为我认为当模型被破坏时视图被破坏,但找不到参考。 谢谢
【问题讨论】:
标签: backbone.js backbone-views
如果您在开发工具中查看 ToDo 应用程序,每次创建新的 ToDo(model) 时都会在 AppView 中创建一个新的 ToDoView。但我没有看到 ToViews 的“集合”。我问这个是因为我认为当模型被破坏时视图被破坏,但找不到参考。 谢谢
【问题讨论】:
标签: backbone.js backbone-views
视图通常是内存中的结构(如 DOM 本身),因此只要您的 javascript 代码持有对它们的引用(从而使它们无法被浏览器的 JS 引擎进行垃圾收集),它们就会继续存在。关上窗户,他们就走了。单击指向另一个页面的链接,该页面会加载整页,然后它们就消失了。
但是,视图不会自动响应正在销毁的模型。如果您希望模型在通过主干删除时从 DOM 中消失,则必须手动连接诸如 this.listenTo(this.model, 'destroy', this.remove.bind(this)) 之类的东西。
另外,正如您所注意到的,当您有一组要渲染的模型时,通常只为每个模型创建一个新视图,渲染它,然后不保留对它的引用。当集合发生变化时,最外层的元素被清空,新的视图实例被创建和渲染,因此旧的视图实例有资格进行自动垃圾回收。因此 javascript 将处理清理那些旧视图,但这不会对相应的模型产生任何影响,也不会触发任何 AJAX 请求。
【讨论】: