gpt4 book ai didi

javascript - 主干 - 实例化 View 有旧数据

转载 作者:行者123 更新时间:2023-11-29 19:45:58 33 4
gpt4 key购买 nike

我有以下 View 类:

define(function(require) {
var Backbone = require('backbone');

var TestView = Backbone.View.extend({
el: $("#test"),
test: new Array(),

initialize: function(){
this.test.push("test");
console.log(this.test);
}
});

return TestView
});

当我实例化 View 时,像这样:

var v = new TestView();

测试数组每次递增 1,而不是每个实例都为空。我已采取措施删除僵尸 View (按照此 URL 中的步骤操作:http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/)但数组仍保留每个新实例的旧数据。

显然我可以删除初始化函数中的数据,但我很好奇为什么这些数据被保留在一个本质上是全新的 View 对象中?似乎是一些垃圾收集问题?

最佳答案

你的 new Array() 调用只在你创建 TestView 原型(prototype)时进行,你需要在实际创建对象时创建它,否则它会在 TestView 的所有实例之间共享,

initialize: function(){
this.test = new Array();
this.test.push("test");
console.log(this.test);
}

同样的事情也会发生在你的 el: $("#test") 调用上,如果我这样做的话,

var v = new TestView();
$("#test").detach();
var v2 = new TestView();
v.el == v2.el // true

所以为了完成你想要的,

define(function(require) {
var Backbone = require('backbone');

var TestView = Backbone.View.extend({
initialize: function(){
this.test = new Array();
this.test.push("test");
console.log(this.test);
}
});

return TestView
});

var v = new TestView({ el : '#test'});

关于javascript - 主干 - 实例化 View 有旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19705114/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com