我有一个视图,我在两个单独的标签上创建了两次。在这个视图的每个实例中,我有一堆子视图。每次我创建父视图时,它都会在其自身内创建新的子视图。同时,它将这些子视图推送到一个被调用的数组:
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
创建一个新数组时,backbone只会附加到一个名为itemViews的整个数组,就像每个数组一样两个父视图共享相同的itemViews
数组。因此,它不仅仅是破坏相应选项卡的视图,而是从两个选项卡中销毁视图。是否有:
谢谢!
答案 0 :(得分:1)
您需要实例化itemViews
媒体资源,使其属于视图 实例 。
您应该在initialize
函数中执行此操作,如下所示:
initialize: function(options) {
this.itemViews = [];
// rest of initialize code
}
这应该使itemVews的行为符合您的预期。