Backbone.js 主干:清除内存中的所有数据

Backbone.js 主干:清除内存中的所有数据,backbone.js,view,destroy,Backbone.js,View,Destroy,我有一个菜单,点击后,创建一个主干视图并绑定控件。每次单击菜单时都会发生这种情况。我需要知道的是,在定义和渲染视图之前(每次单击菜单),如何从内存中清除主干对象 否则,每次单击菜单时,主干将创建一个新视图并重新绑定所有控件。所以我得到了这样的结果: r {cid: "view1", options: Object, $el: b.fn.b.init[1], el: div#templatePlaceholder, constructor: function…} r {cid: "view2",

我有一个菜单,点击后,创建一个主干视图并绑定控件。每次单击菜单时都会发生这种情况。我需要知道的是,在定义和渲染视图之前(每次单击菜单),如何从内存中清除主干对象

否则,每次单击菜单时,主干将创建一个新视图并重新绑定所有控件。所以我得到了这样的结果:

r {cid: "view1", options: Object, $el: b.fn.b.init[1], el: div#templatePlaceholder, constructor: function…}
r {cid: "view2", options: Object, $el: b.fn.b.init[1], el: div#templatePlaceholder, constructor: function…}
r {cid: "view3", options: Object, $el: b.fn.b.init[1], el: div#templatePlaceholder, constructor: function…}
注意:DOM仅显示一个渲染

编辑: 代码:

每次单击菜单项时都会触发此代码。
这将创建一个新的视图

我可以在核心主干中想出两种方法(可能还有更多,但这只是一个开始)

  • 保留对视图的引用,当需要关闭菜单时,调用视图

  • 您不必删除视图,您只需显示/隐藏它,没有任何问题

  • 使用Marrionete/Chappline/LayoutManager,它们有一些固定的方法来维护您的视图


  • 关于您的应用程序/结构的更多信息以及用例将允许我提供更多帮助

    我可以在核心主干中想出两种方法(可能还有更多,但这只是一个开始)

  • 保留对视图的引用,当需要关闭菜单时,调用视图

  • 您不必删除视图,您只需显示/隐藏它,没有任何问题

  • 使用Marrionete/Chappline/LayoutManager,它们有一些固定的方法来维护您的视图


  • 关于你的应用程序/结构以及用例的更多信息将允许我提供更多帮助

    我正在做一些非常基本的事情。只要将视图对象传递给remove(),我就可以删除视图。但是,当我单击菜单时,它无法知道视图对象是什么。也许我可以通过ID删除视图。这会有所帮助。但是如果我可以删除主干范围之外的所有主干视图,那将是最好的。我正在做一些非常基本的事情。只要将视图对象传递给remove(),我就可以删除视图。但是,当我单击菜单时,它无法知道视图对象是什么。也许我可以通过ID删除视图。这会有所帮助。但是如果我可以删除主干作用域之外的所有主干视图,那将是最好的。谢谢Eran,我不会关闭主干视图。我的应用程序不是主干应用程序。实际上,我正在使用Durandal在视图之间进行路由,在其中一个页面中,我有一个树状视图。此树视图(onclick)调用上面创建主干模型等的脚本并呈现视图。每次单击treeview节点时,都会再次运行整个主干脚本,并创建新模型并加载新视图。因此,我没有管理主干中每个主干模型/视图实例的生命周期。我需要一种从主干上下文外部销毁主干的方法。到目前为止,我已经通过使用jquery.unbind()成功地解除了绑定。如果我还可以找到一种方法,在每次单击treeview时从内存中删除所有主干对象,那就是idealbackbone没有“全部清除”方法,这取决于您,您需要有一个保存视图实例的对象(例如,元素上的数据属性,有点难看,但我们忽略它),然后在每个视图上调用.remove(),然后,如果要对其进行垃圾收集,则需要删除对该视图的引用,方法是删除数据属性,或者如果它位于对象中,则执行
    delete viewholder.view1
    等操作。。。这是主干方式,请检查木偶/布局管理器(或者使用jstree,忘记在主干中执行此操作;))谢谢Eran,我将尝试木偶Tesanks Eran,我不会用主干关闭视图。我的应用程序不是主干应用程序。实际上,我正在使用Durandal在视图之间进行路由,在其中一个页面中,我有一个树状视图。此树视图(onclick)调用上面创建主干模型等的脚本并呈现视图。每次单击treeview节点时,都会再次运行整个主干脚本,并创建新模型并加载新视图。因此,我没有管理主干中每个主干模型/视图实例的生命周期。我需要一种从主干上下文外部销毁主干的方法。到目前为止,我已经通过使用jquery.unbind()成功地解除了绑定。如果我还可以找到一种方法,在每次单击treeview时从内存中删除所有主干对象,那就是idealbackbone没有“全部清除”方法,这取决于您,您需要有一个保存视图实例的对象(例如,元素上的数据属性,有点难看,但我们忽略它),然后在每个视图上调用.remove(),然后,如果要对其进行垃圾收集,则需要删除对该视图的引用,方法是删除数据属性,或者如果它位于对象中,则执行
    delete viewholder.view1
    等操作。。。这是主干方式,请检查木偶/布局管理器(或者使用jstree,忘记在主干中执行此操作;))谢谢Eran,我将尝试木偶
                var app = {
                    Collection: Backbone.Collection.extend({}),
                    Model: Backbone.Model.extend({}),
                    View: Backbone.View.extend({
                        initialize: function(){
                            this.setElement($('#templatePlaceholder'));
                        },
                        render: function () {
                            var that = this;
                            Q.when(formDataGet.execute()).then(function (data) {
                                that.$el.html(data);
                           });
                        },
                        events: {
                            "click button[id=lbtn]": "goLeft",
                            "click button[id=rbtn]": "goRight"  
                        },
    
                        goLeft: function () {
                            // Button clicked
                            console.log(this);
                        },
                        goRight: function () {
                            // Button clicked
                            console.log(this);
                        }
    
                    }),
    
                };
    
    
                var view = new app.View({
                });
    
                view.render();