我有一个Rails 2.3.10应用程序,它使用fields_for在has_many关联的属性中包含字段。我在父模型上使用accepts_nested_attributes_for,并且使用以下命令在表单中显示了许多子项:
<% form_for :map do |f| %>
...
<% f.fields_for :markers do |marker_f| %>
<%= marker_f.text_field :lat
<%= marker_f.text_field :long
<% end %>
<% end %>
fields_for帮助器遍历子标记模型,并为每个模型生成text_field输入。这些文本字段已生成id值,如:
map_markers_attributes_0_lat和 map_markers_attributes_0_long
map_markers_attributes_1_lat和 map_markers_attributes_1_long
...
map_markers_attributes_5_lat和 map_markers_attributes_5_long
id中的整数是迭代的记录数组的索引。如何访问此索引值以在我的代码中的其他位置使用?
例如,我想使用Javascript访问这些输入的id值。
<% form_for :map do |f| %>
...
<% f.fields_for :markers do |marker_f| %>
<%= marker_f.text_field :lat
<%= marker_f.text_field :long
<% content_for :head do %>
<% javascript_tag do %>
$('<%= generate_html_id(marker_f, :lat) %>').observe_field('change');
$('<%= generate_html_id(marker_f, :long) %>').observe_field('change');
<% end %>
<% end %>
<% end %>
<% end %>
我在html的头部插入一些javascript来观察字段是否有任何变化。我需要知道字段的id,我的generate_html_id方法应该能够从marker_f构建器对象复制字段的id。但是我不知道如何从fields_for获取索引值。
似乎应该有一个fields_for_with_index方法,但没有:
<% form_for :map do |f| %>
...
<% f.fields_for_with_index :markers do |marker_f, i| %>
<%= marker_f.text_field :lat
<%= marker_f.text_field :long
<% content_for :head do %>
<% javascript_tag do %>
$('<%= generate_html_id(marker_f, :lat, i) %>').observe_field('change');
$('<%= generate_html_id(marker_f, :long, i) %>').observe_field('change');
<% end %>
<% end %>
<% end %>
<% end %>
BTW我可以为该字段创建自定义ID值,但更愿意遵守惯例。
答案 0 :(得分:0)
或者你可以为有问题的元素分配一个CSS类,然后在dom上连接你的监听器:准备好找到这个类的所有元素。