Rails 2.3 Javascript-функция с четырьмя уровнями вложенной формы - PullRequest
4 голосов
/ 12 апреля 2009

Я использую Пример сложной формы Alloy здесь . В качестве примера он приводит двухуровневую иерархию, и я пытаюсь расширить ее до четырех.

У него есть функции JavaScript для добавления вложенных элементов. Как развернуть на четыре вложенных слоя?

'.add_nested_item': function(e){
   el = Event.findElement(e);
   template = eval(el.href.replace(/.*#/, ''))
   $(el.rel).insert({    
     bottom: replace_ids(template)
   });
 },
 '.add_nested_item_lvl2': function(e){
   el = Event.findElement(e);
   elements = el.rel.match(/(\w+)/g)
   parent = '.'+elements[0]
   child = '.'+elements[1]

   child_container = el.up(parent).down(child)    
   parent_object_id = el.up(parent).down('input').name.match(/.*\[(\d+)\]/)[1]

   template = eval(el.href.replace(/.*#/, ''))

   template = template.replace(/(attributes[_\]\[]+)\d+/g, "$1"+parent_object_id)

   // console.log(template)
    child_container.insert({     
     bottom: replace_ids(template)
    });
 }

Ответы [ 3 ]

1 голос
/ 24 апреля 2009

К сожалению, это тоже не моя область знаний ...

Позвольте мне просто заявить, что я не буду использовать пример, который используется в примерах сложной формы для такой большой вложенности. Скорее, я бы полностью собрал необходимые входные данные формы в JS с помощью обычного API DOM. Это должно дать вам более чистую и экономную реализацию, а также лучшую тестируемость.

Ура, Эла

1 голос
/ 12 апреля 2009

Я думаю, что это немного перегруженная форма, если вам нужно обрабатывать трехуровневую иерархию. переосмыслите свой интерфейс в первую очередь.

Кроме этого - я не думаю, что вам нужно создавать связанные объекты в контроллере, поскольку пример приложения строит их (при необходимости) в представлениях (app / views / projects / _form.erb):

<% @project.build_author unless @project.author %> <% project_form.fields_for :author do |author_form| %>

0 голосов
/ 09 сентября 2010

Райан Бейтс сделал это решение простым. Работает с Rails 3 с комментарием helmerj:)

http://railscasts.com/episodes/197-nested-model-form-part-2

комментарий helmerj:

Для последней версии Rails3.rc необходимо изменить одну строку:

в "модуле ApplicationHelper"

link_to_function (name, "add_fields (this, \" # {association} \ ", \" # {escape_javascript (fields)} \ ")")

, которая удаляет ненужную функцию h (). В противном случае работает как шарм.

...