簡體   English   中英

Backbone.js子視圖未清除

[英]Backbone.js subviews not getting cleared

我有以下代碼

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時,我希望子視圖在初始化console.log中打印為空。 但是它正在打印以前的虛擬子視圖。 如何解決這個問題?

在這里找到JSFiddle- http://jsfiddle.net/ZWM89/3/

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

subviews屬性的值是一個對象。 對象是通過引用復制的,因此該實例將被所有DummyView實例共享。 只需在initialize方法中移動實例,即可為每個DummyView對象創建自己的實例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM