Как получить доступ к индексу fields_for ActionView при выполнении итераций по многим дочерним записям? - PullRequest
1 голос
/ 25 января 2011

У меня есть приложение Rails 2.3.10, которое использует fields_for для включения полей в атрибуты ассоциации has_many.Я использую acceptpts_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.В этих текстовых полях были сгенерированы значения идентификаторов, такие как:

  • map_markers_attributes_0_lat и map_markers_attributes_0_long

  • map_markers_attributes_1_lat и map_markers_attributes_1_l1

    1015 *1012* 1015 *1012* 1015 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012

    1012 *1012* 1012 *1015* 1012 *1015* ...

  • map_markers_attributes_5_lat и map_markers_attributes_5_long

Целое число в id - это индекс массива записей, который повторяется.Как получить доступ к этому значению индекса для использования в другом месте моего кода?

Например, я хочу использовать Javascript для доступа к значениям идентификатора на этих входах.

<% 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 %>

Я вставляю некоторый javascript в заголовок html, чтобы наблюдать за полем для любых изменений.Мне нужно знать идентификатор поля, и мой метод generate_html_id должен иметь возможность реплицировать идентификатор поля из объекта построителя marker_f.Однако я не знаю, как получить значение индекса из 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 для поля, но предпочли бы придерживаться соглашений.

1 Ответ

0 голосов
/ 21 февраля 2011

В качестве альтернативы вы можете назначить CSS-класс для рассматриваемых элементов, а затем подключить слушателя к dom: ready, найдя все элементы этого класса.

...