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

New Backbone instance property pointing to old instance property

我注意到 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")。但是第二个视图的集合 属性 有一个 属性 searchTerm 即 'test'。我原以为这是一个新的 Backbone 系列....

Codepen 是 here

这是预期的行为。

集合仅在您调用 extend 时创建一次。所有实例在 CollectionView.

的原型中只有 collection 引用

如果您希望每次都使用新集合实例化您的视图,只需创建 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);