根据我的理解,除非模型指定了urlRoot
,否则Backbone JS模型的默认行为是返回Collection的URL。我似乎无法使行为正常。
从文档中:
model.url() ... Generates URLs of the form: "[collection.url]/[id]" by default, but you may override by specifying an explicit urlRoot if the model's collection shouldn't be taken into account.
这分别是我的收藏和模特:
var MyCollection = Backbone.Collection.extend({
model: Model,
initialize: function(options){
this.options = options || {};
},
url: function(){
return "/theurl/" + this.options.param;
}
});
return MyCollection;
...
var MyModel = Backbone.Model.extend({
urlRoot: '/theurl',
initialize: function() {
}
});
return MyModel;
当模型加载时没有集合时,它可以很好地工作并提交给
/theurl
,但是当模型加载到集合中时,所有方法都将提交给/theurl/param/
。如果我正确地理解了文档,那么Model的
urlRoot
应该覆盖此行为;即使这样,模型网址也应该是/theurl/param/{MODEL-ID}
。关于我所缺少/误解的任何想法?
...
PS:集合中的
model: Model
通过RequireJS引入
最佳答案
即使您指定了urlRoot
,它也将始终使用集合的url。
使用urlRoot
的原因是,您可以在替代中使用它,或者如果模型恰巧不在集合中(例如,它可能已被删除,但在客户端上仍然存在)。
因此,如果要fetch
或save
模型并覆盖由集合生成的url,则需要将urlRoot
显式地传递给这些方法作为选项。例如:
yourModel.save({ url: yourModel.urlRoot });
我同意文档令人困惑,这也让我最近也感到困惑。
关于backbone.js - 使用collection.url的BackboneJS model.url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17461264/