假设我有一个这样的json设置:
{
page:1,
items:[
{
name: 'item1',
id:1
},
{
name: 'item1',
id:2
},
{
name: 'item1',
id:3
}
]
}
这样的建模:
var Item = Backbone.Model.extend({
defaults: {name: "No name"}
});
var ItemCollection = Backbone.Collection.extend({
model: Item,
url: '/some/ajax/url',
});
获取此json后,如何映射设置为ItemCollection集合的项目,并将页码作为属性添加到集合中?
答案 0 :(得分:26)
正如@asawyer所提到的,你必须覆盖parse方法,但你不需要实际实例化每个项目,如果你返回项目数组,Backbone可以为你做。
的文档解析
无论什么时候,collection.parse(response)
都会被Backbone调用 集合的模型由服务器在fetch中返回。功能 传递原始响应对象,并且应该将要添加的模型属性数组返回到集合。
您的代码可以写成
var ItemCollection = Backbone.Collection.extend({
model: Item,
url: '/some/ajax/url',
parse: function(data) {
this.page=data.page;
return data.items;
}
});
答案 1 :(得分:2)
您需要覆盖parse
它最终会看起来像这样:
class Item extends Backbone.Model
defaults:
name: "No name"
class ItemCollection extends Backbone.Collection
model: Item
url: '/some/ajax/url'
parse: (data) ->
items = []
_.each data, (item) ->
newItem = new Item
id: item.id
name: item.name
items.push newitem
items
(Coffeescript,但很容易转换成直接的javascript)
您的另一个选项是在以下位置找到的关系插件:
https://github.com/PaulUithol/Backbone-relational
我从来没有使用它,但我认为应该为你做解析映射。