web-dev-qa-db-ja.com

バックボーンアプリでさまざまなURLを指定するにはどうすればよいですか?

実行されているアクションのタイプに応じてさまざまな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を変更することを提案しないでください。それは私次第ではありません。

ありがとう!

26
gcdev

概念的には、バックボーンモデルの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ではなくパラメータが作成されていることがわかりました。それに応じて私の例を更新しました。

55
Benjamin Atkin