2013-03-25 42 views
1

我是一個完整的noob with Backbone,我現在只學習了8個小時,所以很抱歉如果這個問題看起來很基本。這個文件不是很清楚。主幹Ajax驗證

有問題的模型Product需要運行大量的Ajax調用。在我的模型邏輯中,我需要根據特定條件在模型驗證中運行至少2個Ajax調用。

不僅如此,但在某些領域改變我還需要運行Ajax調用的每個字段觸發從上次更改冒泡了自己的變化領域,即:

  • 到價格改變
  • 模型通過服務器調用重新計算產品的價格
  • 同時,從價格變化觸發對模型的供應商變量的更改
  • 供應商更改必須在價格更改後執行Ajax調用。

所以我需要知道的是:基本上我應該如何將所有的Ajax調用轉換爲Backbone?這裏最好的方法是什麼?

+0

你不能在'validate'方法中進行異步驗證。它的設計和完全針對客戶端工作(https://github.com/documentcloud/backbone/issues/233)。 – WiredPrairie 2013-03-25 10:56:55

+0

@WiredPrairie儘管在結束時它確實會說「如果您想執行服務器端驗證,請隨時通過調用set()更改客戶端狀態之前運行驗證。」所以對於那些稍微複雜一些的模型應該沒問題,我也看到了使用save的解決方法:http://stackoverflow.com/questions/11331604/backbone-js-ajax-calls – Sammaye 2013-03-25 11:04:27

+0

是的,都是真的。我想指出,你不能以自然的方式使用'validate',並且你需要構建自己的prevalidate邏輯。 – WiredPrairie 2013-03-25 11:07:35

回答

0

我打算用我的發現和解決方案來回答這個問題。

所以我已經完成了與所有Ajax調用的骨幹集成。我解決這個問題的方式是使用jQuery的承諾API從可用於鏈接的模型函數返回延遲對象。然後我在我的界面中以鏈接的方式使用了這個功能。

爲了更好地解釋這裏是一個例子: - 假設我在Product的一個類中有兩個函數;一個叫做populateRecord,另一個叫set_price。每個人都進行自己的Ajax調用和處理。

在視圖裏ProductView我將能容納一個函數調用edit這將處理的方式和邏輯,當這兩個模型的功能應該被稱爲像這樣:

this.model.populateRecord().then(function(data){ return $this.model.set_price(data) }) 

把「業務」方面的方法這種觀點運作良好,解決了很多問題。

希望這可以幫助其他人,