2009-04-12 2 views
4

합금의 복잡한 폼 예제를 사용하고 있습니다. here입니다. 그가 제공하는 예제는 2 수준의 계층이며 4로 확장하려고합니다.레일 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

라이언 베이츠는이 솔루션을 쉽게했다. helmerj의 코멘트 :와 레일 3와 함께 작동

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

helmerj의 코멘트 :

"모듈 ApplicationHelper"에

: 최신 Rails3.rc의 하나

는 하나의 줄을 수정해야

link_to_function (명칭 "add_fields (이 \"# 연관 {} \ "\"# {escape_javascript (필드)} \ ")")

은 불필요한 h() 함수를 제거합니다. 그렇지 않으면 매력처럼 작동합니다.

1

3 레벨 계층 구조를 처리해야하는 경우 약간 오버로드 된 양식이라고 생각합니다. 먼저 UI를 다시 생각해보십시오.

<% @project.build_author unless @project.author %> <% project_form.fields_for :author do |author_form| %> : - 그 외에는

난 당신이 예제 응용 프로그램은 조회수 (응용 프로그램/뷰/프로젝트/_form.erb)에서 (필요한 경우)을 기반으로하기 때문에 컨트롤러에 연관된 객체를 구축 할 필요가 있다고 생각하지 않습니다

+0

앱을 작성해 주셔서 감사합니다. 내 질문을 업데이트했습니다. – Todd

1

불행하게도이

나를 그냥 너무 많이 중첩에 대한 복잡한 폼 예제에 사용되는 예를 사용하지 않을 것이라고 언급하자 ... 정말 중 제 전문 분야가 아닙니다. 오히려 일반 DOM API를 사용하여 JS에서 필요한 양식 입력을 완벽하게 구축 할 수 있습니다. 그렇게하면 훨씬 깨끗하고 구현이 쉬우 며 테스트가 더 쉬워집니다.

건배, 에로