我创建了一个网站来创建一些地图。所以,我的所有地图都有一个id
,我的地图上有一些带有ID的元素。
所以我创建了一个带有id的集合Map,它的模型是我的地图对象:
app.collections.mapDetailsCollection = Backbone.Collection.extend({
model: app.models.mapDetailsModel,
initialize: function(options) {
this.id = options.id;
},
url: function () {
return this.absURL + '/api/maps/' + this.id;
},
parse: function(response){
return response.features;
},
toGeoJSON: function(){
var features = [];
this.models.forEach(function(model){
var feature = model.toGeoJSON();
if (! _.isEmpty(feature.geometry)) {
features.push(feature);
}
});
return {
'type': 'FeatureCollection',
'features': features
};
}
});
但我的模特也有一个id。我不知道模型如何返回带有集合ID的URL。
我需要返回/api/maps/id_collection/id_model
。
答案 0 :(得分:2)
将模型添加到集合时,它会接收对集合的引用。因此,如果每个模型都在集合中,则会设置集合属性this.collection
。
来自Backbone model constructor文档(强调我的):
如果您传递
{collection: ...}
作为选项,则模型获得一个collection
属性,用于指示哪个集合 model属于,用于帮助计算模型的url。的的model.collection
属性通常在您自动创建 首先将模型添加到集合中。请注意,反之则不然, 将此选项传递给构造函数时不会自动添加 该集合的模型。有时候很有用。
然后,您可以使用它来构建模型的完整URL:
var app.models.mapDetailsModel = Backbone.Model.extend({
urlRoot: function() {
// Backbone adds the model id automatically
return this.collection.url() + '/my-model/';
}
// ...snip...
});
请注意,模型的默认网址是您想要的。
默认情况下生成格式为
[collection.url]/[id]
的网址,但是 您可以通过指定模型的显式urlRoot
来覆盖 收集不应该被考虑在内。