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 с обикновения DOM API. Това би трябвало да ви даде много по-чиста и по-икономична реализация, а също и по-добра възможност за тестване.

Наздраве, Елой

person alloy    schedule 24.04.2009

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

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

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

За най-новия Rails3.rc ONE трябва да промени един ред:

в "модул ApplicationHelper"

връзка_към_функция(име, "добавяне на полета(това, \"#{асоциация}\", \"#{escape_javascript(полета)}\")")

което премахва ненужната функция h(). Иначе работи като чар.

person Todd    schedule 08.09.2010