javascript - Backbone - 实例化 View 包含旧数据

标签 javascript backbone.js

我有以下 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();

测试数组每次都会加一,而不是在每个实例上都为空。我已采取措施删除僵尸 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 - Backbone - 实例化 View 包含旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19705114/

相关文章:

javascript - HTML + Javascript document.write 不起作用

javascript - 同时在 Backbone.js 中对 Collection 的 ListView 重新编号

javascript - 通过 RESTful API 使用 django 和 backbone 进行用户注册

javascript - 提交时不会触发主干事件

javascript - Backbone .js : Not rendering some view

javascript - 清除后,localStorage 会记住以前的值

javascript - 从 React-redux-universal-hot-example 入门套件中的第 3 方 API 初始加载数据

javascript - 试图将 html div 转换为图像。考虑到 transform3d

javascript - Express.js 路线组织

Javascript:如何从索引为 0 的数组中拼接一个值?