我遇到了一个问题,我正在添加到集合中CollectionA
,在哪里CollectionA
并CollectionB
正在侦听添加事件。但是,添加到 时,两个集合都会触发添加事件CollectionA
。 CollectionA
并且CollectionB
是扩展Backbone.Collection
且仅设置 url 的基本集合。
查看定义
ModelViewA = Backbone.View.extend({
...
render : function() {
var self = this;
var attributes = this.model.toJSON();
this.$el.html(this.template(attributes));
var collectionB = new CollectionB();
var collectionViewB = new CollectionViewB();
collectionB.fetch({
self.$el.append(collectionViewB.render().el);
});
return this;
},
...
});
CollectionViewA = Backbone.View.extend({
initialize : function() {
this.collection.on('add', this.renderOne, this);
},
...
render : function() {
this.collection.forEach(this.renderOne, this);
return this;
},
renderOne : function(model) {
console.log('Added to Collection A');
var view = new ViewA({ model : model });
this.$el.append(view.render().el);
return this;
}
});
CollectionViewB = Backbone.View.extend({
initialize : function() {
this.collection.on('add', this.renderOne, this);
},
...
render : function() {
this.collection.forEach(this.renderOne, this);
return this;
},
renderOne : function(model) {
console.log('Added to Collection B');
var view = new ViewB({ model : model });
this.$el.append(view.render().el);
return this;
}
});
这就是我如何开始这些事件的级联......
var collectionA = new CollectionA();
var modelViewA = new ModelViewA({
model : collectionA.at('some id');
});
$('body').append(modelViewA.render().el);
$('body').empty();
var collectionViewA = new CollectionViewA({ collection: collectionA });
$('body').append(collectionViewA.render().el);
collectionViewA.add([{...}]);
此代码将使用模型视图正确输出初始视图。然后它将正确呈现collectionViewA
,但是当我触发 add 事件时,它将尝试添加到CollectionA
,CollectionB
因此控制台将在每次调用 add 事件时显示以下内容
Added to Collection B
Added to Collection A
它也会尝试渲染Collection B
,但由于模板没有给出模型而引发错误。
让我知道这是否太令人困惑,我可以尝试更多地清除此描述。
谢谢!