1

我有一个 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 %>

顺便说一句,我可以为该字段创建自定义 id 值,但更愿意遵守约定。

4

1 回答 1

0

或者,您可以为有问题的元素分配一个 CSS 类,然后通过查找该类的所有元素将您的侦听器连接到 dom:ready。

于 2011-02-20T22:22:18.457 回答