请考虑以下事项:
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
会发生什么?我是否必须明确销毁旧视图?
答案 0 :(得分:5)
只要auto
元素view0
存在,您的DOM
就会留在记忆中。因为DOM元素上的事件处理程序指向了视图的方法,所以它不会被垃圾收集。
理想情况下,您应该调用#right-block
,这会删除view0.remove()
中的元素并调用DOM
。
但是在您的示例代码中,如果您这样做,则元素stopListening()
将从DOM中删除,而#right-block
将无法按预期工作。
在这种情况下,请尝试调用view1.setElement("#right-block");
,如果没有其他内容引用视图实例,则将其进行垃圾回收
答案 1 :(得分:0)
不,你不必破坏旧视图。不必手动清除自身超出范围的对象中的变量。当它们超出范围或删除父对象时,其中包含的数据也有资格进行垃圾回收。