Backbone.js中的内存管理

时间:2016-01-13 08:43:08

标签: javascript backbone.js memory-management

请考虑以下事项:

    SomeView = Backbone.View.extend({
        render0: function () {
            var view0 = new View0();
            view0.setElement("#right-block");
            view0.render();
        },
        render1: function(event) {
            var view1 = new View1();
            view1.setElement("#right-block");
            view1.render();
        },

    });

如果我致电render0()然后render1,对象view0会发生什么?我是否必须明确销毁旧视图?

2 个答案:

答案 0 :(得分:5)

只要auto元素view0存在,您的DOM就会留在记忆中。因为DOM元素上的事件处理程序指向了视图的方法,所以它不会被垃圾收集。

理想情况下,您应该调用#right-block,这会删除view0.remove()中的元素并调用DOM

但是在您的示例代码中,如果您这样做,则元素stopListening()将从DOM中删除,而#right-block将无法按预期工作。

在这种情况下,请尝试调用view1.setElement("#right-block");,如果没有其他内容引用视图实例,则将其进行垃圾回收

答案 1 :(得分:0)

不,你不必破坏旧视图。不必手动清除自身超出范围的对象中的变量。当它们超出范围或删除父对象时,其中包含的数据也有资格进行垃圾回收。