我正在进行一个项目,我需要从服务器获取一些数据并从中生成Backbone Collection。以下代码按预期工作:
var Collection = Backbone.Collection.extend({});
var collection = new Collection({});
collection.fetch({
url: "http://localhost/api/somecollection",
success: function(response) {
// Do something here
}
})
结果是这样的:
{
foo: "lorem ipsum",
bar: [{
a: "a",
b: "b",
c: "c"
}, {
a: "a",
b: "b",
c: "c"
}]
}
“bar”属性是我想要变成bb集合的东西。我实际上是通过获取响应并使用其模型实例化一个新的集合来实现的:
success: function(response) {
var newCollection = new Collection(response.models[0].attributes.bar);
}
我在这里要做的是避免一个新的集合实例,只有一个应该足够了。而且我无法更改服务器响应以返回我只需要的数组。
问题:有没有办法提供一个“获取”的参数,所以它可以引用“bar”道具?
答案 0 :(得分:7)
覆盖Colletion.parse
以自定义集合处理服务器响应的方式:
var Collection = Backbone.Collection.extend({
parse: function (resp) {
return resp.bar;
}
});
var collection = new Collection();
collection.fetch({
url: "http://localhost/api/somecollection"
});