0

エンティティがdestroyを呼び出したときに生成されるURLを変更したいと思います。/ {Action} /{EntityID}にHTTPDELETEを書き込む代わりに、/ {Action} / {EntityID}/{SecondEntityID}を送信したいと思います。

item.destroy({
    data: $.param({
        playlistId: playlistId
    }),
    processData: true,
    success: callback,
    error: function (error) {
        console.error(error);
    }
});

このようなものはうまくいくかもしれないと思いましたが、追加のパラメーターは追加されていないようです。単に破壊するURLを拡張したい場合、独自の同期メソッド全体を実装する必要がありますか?

4

1 に答える 1

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またはChromeDevToolsを開くと、www.awesome.comに対してXHR/AJAX呼び出しが行われたことがわかります。

所有しているすべてのエンティティでこれを実行する必要があると述べたので、その場合に実行できることはBaseModel、アプリケーションでを作成し、そこからすべてのエンティティを拡張することです。

とにかく、これが役立つことを願っています!

このためのJSFiddle:http: //jsfiddle.net/EwQaD/

于 2013-02-07T17:38:46.063 に答える