Rails 2.3四级嵌套表单Javascript函数

时间:2009-04-12 10:29:10

标签: ruby-on-rails ruby forms nested-forms

我正在使用找到here的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 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

不幸的是,这不是我的专业领域......

让我说明我不会使用复杂形式示例中使用的示例进行如此多的嵌套。而是使用常规DOM API在JS中完全构建所需的表单输入。这应该会给你一个更清洁,更精简的实现,也更好的可测试。

干杯, 埃洛伊

答案 2 :(得分:0)

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

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

helmerj的评论:

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

在“模块ApplicationHelper”

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

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