2012-09-20 43 views
0

我正在建立一個發票應用程序,其中發票可以有各種項目如何通過Ruby on Rails 3中的Ajax更新總和?

在發票視圖我有一排這樣的每個項目:

<%= f.text_field :price %> 
<%= f.text_field :quantity %> 

一個新項目可以被添加到使用Ajax,即不重新提交頁面的發票。

這工作得很好。

但是,如果所有項目的總計也會通過Ajax更新,而且用戶不必每次都重新提交頁面,那將會很不錯。

有人可以告訴我如何做到這一點嗎?

感謝您的任何幫助。

+0

如果您正在更新表單元素,您以何種方式努力更新總值? –

回答

0

您應該考慮使用某種前端MVC或MVVM框架來處理此問題。看看knockoutjs:

簡化動態JavaScript用戶界面通過應用模型 - 視圖 - 視圖模型(MVVM)模式

http://learn.knockoutjs.com/#/?tutorial=collections< - 本教程介紹了幾乎一模一樣,你會是什麼後, 。

基本上,你會設置一個視圖模型,將代表您的看法這將對線項目的集合,這將是「觀察的」時,它被改變,這意味着在淘汰賽語言(添加或刪除)的結合它會被更新。例如,它可能是與每個訂單項綁定的。

然後你就可以有一個計算的觀察到它會自動更新

+0

嘿,謝謝!你建議使用一個插件來完成這項任務? – Tintin81

+0

是的,knockoutjs只是另一個JavaScript庫 – kzhen

0

這取決於你的現有代碼。您是否以JSON格式提交/接收數據?嘗試使用某種客戶端處理(純JavaScript,jQuery或其他框架)。

或者您使用更傳統的Rails :remote窗體與js.erb模板?如果是這樣,您可以更新create.js.erb中的發票總額。喜歡的東西(我假設的發票總額是包裹着使用id =「總」,項目belongs_to的發票標籤,發票具有總場)

... # your current code 
$("#total").update("<%= escape_javascript(@item.invoice.total)%>"); 

相同的刪除和更新操作。

+0

你好,感謝您的幫助。我確實試圖在這裏遵循「傳統的」Rails方式,即使用* create.js.erb *文件。不幸的是,我完全不瞭解jQuery,所以我很感激地將你的代碼添加到我的* create.js.erb *中。但是,我無法讓它工作。仍然試圖找出原因...我在上面發佈了我的代碼... – Tintin81