2011-11-16 203 views
1

基於表單中輸入的數據,從RESTful Web服務檢索數據的主幹協議/最佳實踐是什麼?通過AJAX請求提交表單

從我明白我可以註冊在視圖點擊觀察者,所以當表單提交按鈕被點擊的視圖將檢索表單中的數據。但我不清楚我是否執行從視圖,模型路由器的AJAX呼叫。

從本質上講,我不清楚哪個下面是約定:

  1. 視圖獲取參數,執行AJAX調用,然後將返回的JSON到模式
  2. 視圖獲取參數,並將其傳遞給模式,並將它從Web服務執行AJAX調用和檢索數據
  3. 查看獲取參數並將它們傳遞給路由器並讓它執行AJAX調用並相應地填充相應的模型和視圖?

注:我需要提交搜索條件,以一個RESTful Web服務,它預計的數據進行公佈;糾正我,如果我錯了,但它似乎並不像我可以使用:fetchsave。我應該在使用$ .ajax({...})發佈參數並接收JSON數據的模型中創建一個函數嗎?

回答

9

backbone.js模型已經設置爲執行RESTful請求。方法2是你想要做的。

,你必須在模型中設置的唯一的事情是一個URL:

MyModel = Backbone.Model.extend({ 
    url: 'http://path/to/my/RESTful/service' 
}); 

MyView = Backbone.View.extend({ 
    events: { 
     'submit #myform': 'saveToModel' 
    }, 

    initialize: function() { 
     // ... 
    }, 

    saveToModel: function() { 
     // this triggers a RESTFul POST (or PUT) request to the URL specified in the model 
     this.model.save({ 
      'foo': 'Foo!', 
      'bar': 'Bar!' 
     }); 
    } 


}); 
+0

'fetch'和'save'似乎不是可行的選項(見原文)。我應該創建一個處理請求的新函數嗎? – Dan

+1

Backbone對於RESTful服務非常明智。 'save()'對於這個用例來說工作得很好。該模型知道它應該在新資源時使用「POST」請求。也就是說,如果模型上沒有設置「id」元素。如果有'id'元素集,模型將使用'PUT'請求。另一方面,'fetch'將使用'GET'請求。 – poezn

+0

我對Backbone有點新,但不應該將POST數據發送到處理它的控制器/路由?我認爲這更符合MVC原則......但是如果你想對一條路線進行POST,那麼Backbone的工作方式如何?例如,在sammy.js中,這非常簡單 – Maarten

0

綁定提交事件的形式ID或DIV ID,而不是按鈕的ID。