0

我想更改我的实体调用销毁时生成的 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,我是否必须完全实现我自己的同步方法?

4

1 回答 1

3

您可以通过在调用销毁时在选项中传入 .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/

于 2013-02-07T17:38:46.063 回答