Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backbone.js子视图未被清除_Javascript_Backbone.js_Backbone Views - Fatal编程技术网

Javascript Backbone.js子视图未被清除

Javascript Backbone.js子视图未被清除,javascript,backbone.js,backbone-views,Javascript,Backbone.js,Backbone Views,我有以下代码 var DummyView = Backbone.View.extend({ subviews: {}, remove: function() { console.log('dummy remove'); _.invoke(this.subviews, 'remove'); this.subviews = {}; Backbone.View.prototype.remove.apply(this, arguments); } });

我有以下代码

var DummyView = Backbone.View.extend({
  subviews: {}, 
  remove: function() {
    console.log('dummy remove');
    _.invoke(this.subviews, 'remove');
    this.subviews = {}; 

    Backbone.View.prototype.remove.apply(this, arguments);
  }
});

var StartView = Backbone.View.extend({
  subviews: {}, 

  initialize: function() {
    console.log('Start initialize');
    seen = []; 
    console.log(JSON.stringify(this.subviews,  function(key, val) {
        if (typeof val == "object") {
            if (seen.indexOf(val) >= 0) {
                return;
            }   
            seen.push(val);
        }   
        return val;
    }));
    this.subviews['dummy'] = new DummyView();
  },

  remove: function() {
    console.log('start remove');
    _.invoke(this.subviews, 'remove');
    this.subviews = {};
    Backbone.View.prototype.remove.apply(this, arguments);
  }
});

var a = new StartView();
a.remove();
delete a;
console.log('creating b and expecting b subviews to be empty');
var b = new StartView();
我已经清楚地删除了“a”及其子视图。现在,当我新建一个“b”StartView时,我希望在initialize console.log中打印的子视图是空的。但它正在打印上一个虚拟子视图。如何解决这个问题

在这里找到JSFIDLE-

子视图
属性的值是一个对象。对象是通过引用复制的,因此它的实例将由所有DummyView实例共享。只需在initialize方法中移动instance,即可为每个DummyView对象创建自己的实例:

var DummyView = Backbone.View.extend({
  initialize: function() { 
      this.subviews = {};
  }, 
  ...
});

对知道答案了!但仍然感谢您抽出时间回复!:)
var DummyView = Backbone.View.extend({
  initialize: function() { 
      this.subviews = {};
  }, 
  ...
});