2009-04-12 9 views
4

Я использую сложную форму сплава Пример найден here. Примером, который он предоставляет, является иерархия двух уровней, и я пытаюсь расширить ее до четырех.Rails 2.3 Четырехслойная вложенная форма Функция Javascript

У него есть функции 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) 
    }); 
} 

ответ

0

Райан Бейтс сделал это решение легко. Работает с 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 (поля)} \ ")")

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

1

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

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

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

+0

Спасибо, что указали, что приложение создает объекты. Я обновил свой вопрос. – Todd

1

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

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

Cheers, Элой