4

我正在使用此处找到的合金的复杂形式示例。他提供的示例是两级层次结构,我正在尝试将其扩展到四级。

他有用于添加嵌套项目的 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)
    });
 }
4

3 回答 3

1

如果您需要处理三层层次结构,我认为它有点重载。首先重新考虑你的用户界面。

除此之外-我认为您不需要在控制器中构建关联的对象,因为示例应用程序在视图(app/views/projects/_form.erb)中构建它们(如果需要):

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

于 2009-04-12T11:32:16.473 回答
1

不幸的是,这也不是我真正的专业领域……</p>

让我声明一下,我不会使用 complex-form-examples 中使用的示例进行如此多的嵌套。相反,我会使用常规 DOM API 完全在 JS 中构建所需的表单输入。这应该会给你一个更干净、更精简的实现,并且也可以更好地测试。

干杯,埃洛伊

于 2009-04-24T11:23:11.917 回答
0

Ryan Bates 使这个解决方案变得简单。与 helmerj 的评论一起使用 Rails 3 :)

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

helmerj 评论:

对于最新的 Rails3.rc 必须修改一行:

在“模块应用程序助手”中

link_to_function(名称,“add_fields(这个,\“#{association}\”,\“#{escape_javascript(字段)}\”)“)

它删除了不需要的 h() 函数。否则就像魅力一样。

于 2010-09-08T21:54:40.813 回答