新的骨干实例属性指向旧的实例属性

New Backbone instance property pointing to old instance property

本文关键字:属性 实例      更新时间:2023-09-26

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

  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。我希望这是一个新的主干集合....

Codepen在这里

这是预期的行为。

Collection只在调用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);