指向旧实例 属性 的新 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);
我注意到 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);