我想更改实体调用destroy时生成的URL。我不想将HTTP DELETE写入/ {Action} / {EntityID},而是发送/ {Action} / {EntityID} / {SecondEntityID}。
item.destroy({
data: $.param({
playlistId: playlistId
}),
processData: true,
success: callback,
error: function (error) {
console.error(error);
}
});
我认为像这样的东西可能会起作用,但它似乎没有附加任何其他参数。如果我想扩展只是破坏'URL?
,我是否必须完整地实现我自己的同步方法答案 0 :(得分:3)
您可以通过在调用destroy时传入选项中的.url属性来覆盖。由于我假设您希望每次通话都这样做,您可以这样做:
var MyModel = Backbone.Model.extend({
destroy: function(options) {
// Override URL
options || (options = {});
// You can put whatever you need here,
options.url = 'http://www.awesome.com/destroy/' + this.get('id') + '/' + this.get('secondaryId');
// Call Model.destroy().
// We are reusing the existing functionality from Backbone.Model.destroy().
Backbone.Model.prototype.destroy.apply(this, arguments);
}
});
var m= new MyModel({ id: 123, secondaryId: 456 });
// Note: You need to set 'id' in order for destroy() call to be successful.
m.destroy({
sucess: function() { console.log('good'); },
error: function() { console.log('bad'); }
});
如果您打开Firebug或Chrome开发工具,您应该会看到向www.awesome.com发出XHR / AJAX调用。
由于您提到要在所有实体中执行此操作,因此在这种情况下您可以执行的操作是在应用程序中创建BaseModel
,并使所有实体从中扩展。
无论如何,希望这有帮助!
JSFiddle:http://jsfiddle.net/EwQaD/