2011-01-26 39 views
1

我正在設計產品配置程序。問題似乎是,每個產品都有多個組件,而且它們彼此交互的方式非常隨意。所以,如果你改變一個零件的數量,在其他地方它需要自動調整等。Rails跟蹤Js在做什麼

因爲所有這些,以及這些規則經常改變的事實,我決定把它們變成Js函數,所以我有軌這樣的事情:

<% @counter = 0 %> 
<% @people.each do |p| %> 
<% @counter += 1 %> 
<tr> 
<%= form_for(:p, :remote => true) do |f| %> 
<th><%= f.label(p.name) %></th> 
<th><%= f.label(p.country.name) %></th> 
<th><%= f.label(p.state.name) %></th> 
<th id="<%= "money_" + @counter.to_s %>"> <%= f.select(:money, 1..10, :selected => p.money)%></th> 
<th id="<%= "comment_" + @counter.to_s %>"><%=p.money_comment%></th> 
<% end %> 
<% end %> 

(字段名這裏是隨機的)

,我有一個文件一個js函數被加載時,像這樣:

function change_people() { 
    money1 = $('money_1').children[0].value; 
    $('comment_2').update((money1 == 5) ? "selected 5!" : 'why not 5?'); 
} 

document.observe('dom:loaded', function() { 
    change_people(); 
    $('money_1').children[0].observe('change', change_people); 
}); 

所以這個工程,我可以修改值取決於用戶選擇什麼等,但...這是問題。軌道如何知道這個? Rails帶來了默認的人數,這些數據來自數據庫等,我如何告訴它,如果/當我想添加到購物車時,新值是什麼?

非常感謝!

回答

0

您可能希望在表單更改時提交表單的值。例如,如果你正在使用jQuery,你可以做這樣的事情:

 
$('.money').change(function(){ $(this).closest('form').submit(); }); 

這個代碼表示,隨時隨地與類「錢」的輸入進行調整,請選擇最接近的形式(這恰好是您定義的遠程表單)。

作爲一個額外的小費,你並不需要跟蹤計數器的使用顯式變量,你在你的代碼示例做,你也可以使用each_with_index:

 
@people.each_with_index do |p, counter| 
    ... 
end 
+0

感謝您的答覆潘。我還沒有想出一種方法來正確存儲數據庫中的不同範圍和選項,以供rails選取。對於默認值,沒有問題。但你認爲我應該如何規定這些規則,因爲顯然將每個可能的形式存儲在數據庫中都太多了。爲了給你一些背景知識,目前,UI是Excel,並且「規則」在數據庫中作爲字符串存儲。當用戶選擇產品時,會帶來這些字符串(它們恰好是Excel公式),因此某些元素在某些變化時會變爲動態。 – Lievcin 2011-01-26 22:50:19