【问题标题】:Are Backbone Views persistent主干视图是否持久
【发布时间】:2013-03-20 00:12:01
【问题描述】:

如果您在开发工具中查看 ToDo 应用程序,每次创建新的 ToDo(model) 时都会在 AppView 中创建一个新的 ToDoView。但我没有看到 ToViews 的“集合”。我问这个是因为我认为当模型被破坏时视图被破坏,但找不到参考。 谢谢

【问题讨论】:

    标签: backbone.js backbone-views


    【解决方案1】:

    视图通常是内存中的结构(如 DOM 本身),因此只要您的 javascript 代码持有对它们的引用(从而使它们无法被浏览器的 JS 引擎进行垃圾收集),它们就会继续存在。关上窗户,他们就走了。单击指向另一个页面的链接,该页面会加载整页,然后它们就消失了。

    但是,视图不会自动响应正在销毁的模型。如果您希望模型在通过主干删除时从 DOM 中消失,则必须手动连接诸如 this.listenTo(this.model, 'destroy', this.remove.bind(this)) 之类的东西。

    另外,正如您所注意到的,当您有一组要渲染的模型时,通常只为每个模型创建一个新视图,渲染它,然后不保留对它的引用。当集合发生变化时,最外层的元素被清空,新的视图实例被创建和渲染,因此旧的视图实例有资格进行自动垃圾回收。因此 javascript 将处理清理那些旧视图,但这不会对相应的模型产生任何影响,也不会触发任何 AJAX 请求。

    【讨论】:

    • 还是一头雾水。如果模型数据发生变化,则必须更新视图。如果它不再存在,它如何更新?似乎模型是唯一可以在这里迭代的真实对象。
    • 视图仍然“确实存在”,如果您的事件连接正确,当模型的数据更改时,该模型的视图将响应这些事件并相应地更新其 DOM 元素。问题是,视图有对其模型的引用,通常没有任何令人信服的理由来保留视图列表,因为如果您只是操纵模型,事件绑定将执行视图并且视图将自动更新。因此,如果您愿意,您可以保留对您的观点的引用,有时您需要,但通常您不必这样做。也许其他人可以更好地解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2013-05-14
    • 2012-11-11
    相关资源
    最近更新 更多