2011-08-08 13 views
26

実行されるアクションのタイプに応じて、さまざまなURLにヒットするバックボーンモデルが必要です。適切なURLを指定できるように、URL関数内のアクションを特定するにはどうすればよいですか?たとえば、次のようにバックボーンアプリでさまざまなURLを指定するにはどうすればよいですか?

DELETE

:/ myapipath /た項目タイプ/ ID/
POST:/ myapipath /特殊パス/
GET:?/ myapipath /特殊パス/コード= ABC

私はどのように知っていますPOSTと他のすべての違いを教えてください:this.isNew()

しかし、カスタムmodel.url関数のDELETEとGETの違いを教えてください。

私はサーバー側のAPIを変更することをお勧めしないでください。それは私にとってではありません。

ありがとうございます!

答えて

55

概念的には、バックボーンモデルのURLがリソースの主要なGET URLです。いくつかのアクションに異なるURLを使用するには、モデルのsync関数をオーバーライドします。幸い、Backbone makes it easy to override

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.paramsのparamsを構築するための全体options引数をマージしていることに気づいた、それに応じて私の例を更新しました。

+0

ニースの回答!私はoptions.paramsが正しいとは思わないが、Backbone.syncは単に渡された 'options'を継承するので、params.urlを探すときは実際はoptions.urlだ – satchmorun

+0

ありがとう!私はあなたのコメントを投稿したときに私の答えを修正していた。 :) –

+0

ありがとうございます - これまでのところ、いくつかのマイナーな変更を加えて動作しているようです。最も注目すべきことに、methodUrlには '投稿'の代わりに '作成'が必要です。私は私の目的のためにいくつかの変更を加えましたが、ここでは本当に注目に値するものは他にありません。いい答えだ。 – gcdev

関連する問題