2014-06-10 50 views
1

我有一個視圖,我在兩個單獨的選項卡上創建了兩次。在這個視圖的每個實例中,我都有一些子視圖。每次創建父視圖時,都會在其內部創建新的子視圖。與此同時,它會將這些子視圖數組被調用,如:在主幹中正確銷燬視圖時出現問題

var ParentView = Backbone.View.extend({ 
     itemViews: [], 

     initialize: function(options) { 
      var self = this; 

      // following creates the specific collection of data 
      // is this what I should be using to destroy the subviews 
      // rather than the itemViews array? 
      this.collection = options.collection; 
      this.collection.on('add', self._createSubView, self); 

     render: function(){// render stuff}, 

     _createSubView: function() { 
      view = new SubView(); 
      this.itemViews.push(view); 
     }, 
    }); 

的問題是,中的父視圖中的一個,有時,我需要摧毀它的子視圖。這是通過做:

_.each(self.itemViews, function (view) { 
     Utils.destroyView(view); // Utility function that destroys the views. 
    }); 

的問題,我面對的是,每次我實例化一個新的父視圖,而不是創建一個新的陣列itemViews,骨幹就追加到一個叫itemViews整個陣列,就如同每個兩個父視圖共享相同的itemViews數組。因此,不僅僅是破壞適當的選項卡的視圖,而是破壞兩個選項卡的視圖。有沒有:

  • 更好的方式來創建子視圖的列表,使每個列表是唯一的父視圖?
  • 比使用這種類型的列表銷燬父視圖的子視圖更好的方法?

謝謝!

+0

還有一些代碼會有幫助。如何調用_createSubView?你從哪裏調用'_.each'循環來銷燬視圖?一個jsfiddle會更好。 –

+0

@NiranjanBorawake謝謝!添加了代碼以顯示'_createSubView'調用。 _.each是一個重置無限滾動的函數,因爲子視圖中的項目使用過濾器進行修改,所以我需要在視圖修改時重置視圖中的項目。讓我知道如果你需要更多,我會粘貼jsfiddle! – YPCrumble

回答

1

您需要實例化itemViews屬性,因此它是屬於一個視圖實例

你應該這樣做在你的initialize功能如下:

initialize: function(options) { 

    this.itemViews = []; 

    // rest of initialize code 

} 

這應該使itemVews表現你所期望的方式。