2011-08-08 59 views
26

我需要根據正在執行的操作的類型,選擇我的一個主幹模型來打擊各種URL。如何確定URL功能中的操作,以便我可以指定適當的URL?例如:如何在骨幹應用程序中指定各種URL?

DELETE:/ myapipath /項目類型/ ID/
POST:/ myapipath /特殊路徑/
GET:/ myapipath /特殊路徑/代碼= ABC

我知道如何告訴POST和其他東西之間的區別:this.isNew()

但是,我如何區分DELETE和GET之間的自定義model.url函數?

請不要建議我更改服務器端API。這不取決於我。

謝謝!

回答

55

從概念上講,Backbone模型的url是資源的主要GET url。要對某些操作使用不同的網址,請覆蓋該模型的同步功能。幸運的是,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參數來構建參數,可以不options.params,並相應地更新我的例子。

+0

好的答案!不過,我不認爲options.params是正確的,因爲Backbone.sync只是擴展了'選項',所以當它尋找params.url時,它實際上只是options.url – satchmorun

+0

謝謝!當您發佈您的評論時,我正在修復我的答案。 :) –

+0

感謝 - 這似乎工作到目前爲止只有一些小的修改,最值得注意的是,methodUrl應該有'創建'而不是'後'。我爲了自己的目的做了一些其他的改變,但是這裏沒有其他值得注意的地方。好答案。 – gcdev