主干 - 实例化视图包含旧数据

Backbone - Instantiated view has old data

本文关键字:包含旧 数据 视图 实例化 主干      更新时间:2023-09-26

>我有以下视图类:

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

当我实例化视图时,如下所示:

var v = new TestView();

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

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

你的new Array()调用只在你创建 TestView 原型时进行,你需要在实际制作对象时创建它,否则它会在 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'});