新的Backbone实例属性指向旧的实例属性

时间:2016-11-02 08:19:43

标签: javascript backbone.js marionette

我注意到Backbone / Marionette有些奇怪。当我创建一个具有新集合属性的视图实例时,我创建了一个视图的另一个实例,它是一个新实例,但集合属性指向第一个视图的实例。见这里:

  var CollectionView = Marionette.CollectionView.extend({
    collection: new Backbone.Collection() 
  });

  var view = new CollectionView();

  console.log('view is ', view);
  view.collection.searchTerm = 'test';
  console.log('view.collection is ', view.collection);

  this.region.show(view);

  var view2 = new CollectionView();
  console.log('view2 is ', view2);
  console.log('view2.collection is ', view2.collection);

  this.region.show(view2);

您可以在日志中看到,有2个不同的视图实例(一个有cid:“view2”,另一个有cid:“view5”)。但是第二个视图的collection属性具有属性searchTerm,即'test'。我本以为这是一个新的Backbone系列....

Codepen是here

1 个答案:

答案 0 :(得分:3)

这是预期的行为。

只有在您拨打extend时才会创建一次收藏。所有实例在collection原型中都有CollectionView引用。

如果您希望每次都使用新集合实例化视图,只需创建initialize方法:

var CollectionView = Marionette.CollectionView.extend({
    initialize: function () {
        this.collection = new Backbone.Collection();
    }
});

var view = new CollectionView();

console.log('view is ', view);
view.collection.searchTerm = 'test';
console.log('view.collection is ', view.collection);

this.region.show(view);

var view2 = new CollectionView();
console.log('view2 is ', view2);
console.log('view2.collection is ', view2.collection);

this.region.show(view2);