2011-01-26 67 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