我需要一个主干模型来根据正在执行的操作类型来查找各种URL。如何确定URL函数中的操作以便我可以指定适当的URL?例如:
DELETE:/ myapipath / itemtype / id /
POST:/ myapipath / special-path /
GET:/ myapipath / special-path /?code = ABC
我知道如何区分POST和其他所有内容:this.isNew()
但是,如何在自定义model.url函数中区分DELETE和GET?
请不要建议我更改服务器端api。这不取决于我。
谢谢!
答案 0 :(得分:55)
从概念上讲,Backbone模型的URL是资源的主要GET URL。要对某些操作使用不同的URL,请覆盖模型的同步功能。幸运的是,Backbone makes it easy to override:
window.MyModel = Backbone.Model.extend({
// ... other stuff ...
url: '/myapipath/special-path/?code=ABC',
methodUrl: {
'create': '/myapipath/special-path/',
'delete': '/myapipath/itemtype/id/'
},
sync: function(method, model, options) {
if (model.methodUrl && model.methodUrl[method.toLowerCase()]) {
options = options || {};
options.url = model.methodUrl[method.toLowerCase()];
}
Backbone.sync(method, model, options);
}
}
编辑:我又看了一下Backbone来源并注意到它合并了整个options
参数来构建参数,而不是options.params
,并相应地更新了我的示例