Rails跟踪Js正在做什么

时间:2011-01-26 20:09:36

标签: javascript ruby-on-rails ruby-on-rails-3

我正在设计产品配置器。问题似乎是每个产品的字面意义都有多个组件,它们相互交互的方式非常随机。因此,如果您在一个部件上更改数量,在其他地方需要自动调整等等。

由于所有这一切,以及这些规则经常发生变化的事实,我决定将它们变成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带来了默认的人数,这是他们从数据库中获取的值等等,如何/当我想要添加到购物车时,我如何告诉它新值是什么?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您可能希望在表单更改时提交表单的值。例如,如果您使用的是jQuery,则可以执行以下操作:

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

此代码表示,只要调整了“money”类的输入,只需提交最接近的表单(恰好是您定义的远程表单)。

作为附加提示,您不需要像在代码示例中那样使用显式变量跟踪计数器,也可以使用each_with_index:

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