【问题标题】:Backbone: Singleton views?Backbone:单例视图?
【发布时间】:2012-07-22 10:50:51
【问题描述】:

我有几个不同的视图,它们主要是构建起来的(布局组件、布局、主视图)。

当我现在在不同视图之间切换时,必须重新渲染整个页面。

至少将布局视图缓存在“窗口”中并重新加载它们不是更好吗?

类似于用于主干视图的单例模式?

我该怎么做? 很简单:

window.MainLayoutView || window.MainLayoutView = new MainLayoutView({ el: 'div.main' });

够了吗?

我还有什么需要考虑的吗?

【问题讨论】:

    标签: javascript backbone.js singleton backbone-views


    【解决方案1】:

    是的,还有更多需要担心的。如果你这样做:

    window.MainLayoutView.render();
    $(x).html(window.MainLayout.el);
    // And later...
    $(x).html(someOtherView.el);
    // And later still...
    $(x).html(window.MainLayout.el);
    

    您会发现window.MainLayout 中的所有事件都已消失。如果您想缓存实例化视图并将其换入和换出,您将不得不安排delegateEvents 调用以重新绑定视图层次结构中的所有事件。

    比较这两个例子的行为,你会发现问题:

    通常您不必费心尝试缓存视图,只需 remove 它们并根据需要重新创建它们。

    【讨论】:

    • 使用 .append 不会导致事件引用丢失。.html 实际上将 html 作为字符串获取,因此您甚至没有真正引用视图 el..
    • @Stephen:但是你不会用append来替换内容,除非你先empty,效果是一样的(jsfiddle.net/ambiguous/dcFDL)。而且我认为您对 .html() 的工作原理感到困惑 (jsfiddle.net/ambiguous/3ZJCq)。
    猜你喜欢
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    相关资源
    最近更新 更多