我正在使用Backbone 0.9.2,它仍然有一个{add: true}
来获取,而牵线木偶1.0.0.b4
所以场景是我在页面加载时将一个集合渲染到屏幕上(这很有效)。现在我想用另一个fetch调用添加到该集合。
根据我的理解,marionette.js每次都会使用重置功能覆盖add函数。
我查看了initializeEvents函数并将“reset”事件绑定到我自己的事件。在我的活动中,我调用了this.collection.add();
,但是它没有将数据呈现到模板中,因为我还没有调用this.render();
。
这就是它变得很糟糕的地方。所以我打电话给this.render();
并呈现数据。好极了!但是,在下一次提取this.render()
时会重置数据(我猜测木偶有自己的渲染功能,总是重置而不是添加)
initialEvents: function () {
if (this.collection) {
this.bindTo(this.collection, "add", this.addChildView, this);
this.bindTo(this.collection, "remove", this.removeItemView, this);
this.bindTo(this.collection, "reset", this.resetted, this);
}
},
resetted: function (item, collection, options) {
// this works, but doesnt render data into the template, just empty divs
this.collection.add();
// this.render() resets the collection.
this.render();
},
Item = collection (with all my data)
Collection = {} (literally)
options = undefined
是的我知道重置是最糟糕的功能名称,但无论如何,它的sudo代码。
我也尝试过marionettes“collectionEvents”,但是在渲染发生之后发现了这些火。
答案 0 :(得分:0)
在Backbone模型和集合上,有一个方法可以覆盖称为parse。
var B = Backbone.Collection.extend({
............,
model: A,
parse: function (data) {
// manipulate your data here then return it
return data;
}
});
当我想在同一个调用中返回多个集合并将数据保存到集合的属性时,我使用此功能。
var B = Backbone.Collections.extend({
..................,
model: A,
pagingCollection: {},
parse: function(data) {
this.pagingCollection = data.PageCollection;
return data.CoreData;
}
});