Backbone.js中的内存管理

kha*_*vah 1 javascript memory-management backbone.js

考虑以下:

    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();
        },

    });
Run Code Online (Sandbox Code Playgroud)

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

T J*_*T J 5

view0只要DOM元素#right-block存在,你的意志就会留在记忆中.因为DOM元素上的事件处理程序指向视图的方法,所以它不会被垃圾回收.

理想情况下,您应该调用view0.remove(),这将删除元素DOM和调用stopListening().

但是在您的示例代码中,如果您这样做,该元素#right-block将从DOM中删除,并且view1.setElement("#right-block");将无法按预期工作.

在这种情况下尝试调用 view0.undelegateEvents(); view0.stopListening();,如果没有其他任何东西引用视图实例,它将被垃圾收集