実行されているアクションのタイプに応じてさまざまなURLにアクセスするには、バックボーンモデルの1つが必要です。適切なURLを指定できるように、URL関数内のアクションを決定するにはどうすればよいですか?例えば:
削除:/ myapipath/itemtype/id /
POST:/ myapipath/special-path /
GET:/ myapipath/special-path /?code = ABC
A POSTと他のすべての違いを見分ける方法を知っています:this.isNew()
しかし、カスタムmodel.url関数でDELETEとGETの違いをどのように見分けることができますか?
サーバー側のAPIを変更することを提案しないでください。それは私次第ではありません。
ありがとう!
概念的には、バックボーンモデルのURLは、リソースのプライマリGETURLです。一部のアクションに異なるURLを使用するには、モデルの同期機能をオーバーライドします。幸いなことに、 バックボーンを使用すると簡単にオーバーライドできます :
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);
}
}
編集:バックボーンソースをもう一度見てみると、options
引数全体がマージされて、options.params
ではなくパラメータが作成されていることがわかりました。それに応じて私の例を更新しました。