Rails 2.3 Четырехуровневая вложенная форма Javascript-функция

Я использую пример сложной формы 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)
    });
 }

person Todd    schedule 12.04.2009    source источник


Ответы (3)


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

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

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

person Eimantas    schedule 12.04.2009
comment
Спасибо, что указали, что приложение создает объекты. Я обновил свой вопрос. - person Todd; 14.04.2009

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

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

Привет, Элой

person alloy    schedule 24.04.2009

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

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

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

Для последней версии Rails3.rc ОДИН должен изменить одну строку:

в "модуле ApplicationHelper"

link_to_function(name, "add_fields(this, \"#{ассоциация}\", \"#{escape_javascript(fields)}\")")

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

person Todd    schedule 08.09.2010