在骨干中适当破坏视图的麻烦

时间:2014-06-10 16:00:41

标签: backbone.js

我有一个视图,我在两个单独的标签上创建了两次。在这个视图的每个实例中,我有一堆子视图。每次我创建父视图时,它都会在其自身内创建新的子视图。同时,它将这些子视图推送到一个被调用的数组:

    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数组。因此,它不仅仅是破坏相应选项卡的视图,而是从两个选项卡中销毁视图。是否有:

  • 创建子视图列表以使每个列表对该父视图唯一的更好方法是什么?
  • 比使用这种类型的列表破坏父视图的子视图更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要实例化itemViews媒体资源,使其属于视图 实例

您应该在initialize函数中执行此操作,如下所示:

initialize: function(options) {

    this.itemViews = [];

    // rest of initialize code

}

这应该使itemVews的行为符合您的预期。