2011-04-21 3 views
3

양식을 제출하기 위해 모달 상자 팝업으로 작업 중입니다. 양식은 유효성 검사에 문제가 있지만 아직 모달 상자 안에 남아 있으면 새로 고쳐집니다. 이것은 : create 액션, POST를 호출하는 것으로 생각되는 새 레코드를 추가하는 데 사용됩니다. 같은 모달 상자를 사용하여 레코드를 편집하고 싶습니다. 지금까지는 모달 상자에서 열 수 있지만 오류가 발생하는 즉시 상자 안쪽에 머물지 않고 다른 페이지로 리디렉션됩니다. 나는 아약스가 javascript를 돌려서 모달 상자 안에 폼을 다시 넣기위한 액션을 호출하지 않는다고 생각한다. 폼을 수정하기 위해 javascript를 다시 모달 상자로 반환하는 아약스를 얻으려면 어떻게해야합니까? 여기 레일 Ajax 호출을 통해 javascript를 호출하는 방법 : update controller action

def create 
@user = User.new(params[:user]) 

respond_to do |format| 
    if @user.save 
    format.js { render :redirect } #this is for modalform  
    format.html { redirect_to(users_url, :notice => 'User was successfully created.') } 
    else 
    format.html {render :new} 
    format.js # this renders the create.js.erb file to keep the form inside 
    end 
end 
end 

모달 상자를로드 및 검증이 정확한지 내부까지 양식을 유지하는 자바 스크립트입니다 : 액션을 만들 : 여기

document.observe('dom:loaded', function() { 
$('newuser-link').observe('click', function(event) { 
    event.stop(); 
    Modalbox.show(this.href, 
     {title: 'Create', 
     width: 500, #up to this point, this opens the form in the modal box 
     afterLoad: function() { # this afterload part is supposed to keep the form inside the modal box 
      $('new_user').observe('submit', function(event) { 
       event.stop(); 
       this.request(); 
      }) 
     }} 
    ); 
    }); 
}) 

을 그리고는 것입니다

예, 여기 내입니다 .js.erb 파일은 : modal 상자 안에 폼을 유지하는 유효성 검사 오류가있는 경우 : create 액션이 호출합니다.

$('MB_content').update("<%= escape_javascript(render :partial => 'form') %>"); 
Modalbox.resizeToContent(); 
$('new_users').observe('submit', function(event) { 
event.stop(); 
this.request(); 
}); 

:이 작업은 : 만들기 작업에서 어떻게 작동합니까? : 레코드를 편집하고 싶을 때 업데이트 작업? 다시 말하지만, 주된 문제는 유효성 검사 오류가있을 때 모달 상자 외부로 리디렉션된다는 것입니다.

UPDATE는 :

$('new_user').observe('submit', function(event) { 
       event.stop(); 
       this.request(); 

은 'NEW_USER가'형식의 ID입니다 :
나는 열려있는 모달 상자를 유지하도록되어 자바 스크립트의 일부를 발견했다. 이것을 사용하여 레코드를 편집 할 때, 양식의 ID는 edit_user_1 또는 edit_user_32 또는 편집중인 모든 사용자입니다. 그래서 여기서 알아낼 수없는 해결책은 id 대신 선택기로 자바 스크립트에서 클래스를 사용하는 방법입니다. 왜냐하면 내가 수동으로 'edit_user_1'을 입력하고 id 1로 사용자를 편집 할 때 작동하지만 ... 분명히 다른 사용자에게는 그렇지 않기 때문입니다. 대신 ModalBox를 사용

답변

1

내가 (여기 튜토리얼) FaceBox를 사용하여 종료 : 거의 동일하지만위한 클래스 나 ID를 추가하는 측면에서 더 유연한 것 같았다

http://net.tutsplus.com/tutorials/ruby/how-to-build-an-unobtrusive-login-system-in-rails/

선택자. 그것의 ID를 요구 다음

var myid = jQuery('#userform').children().attr('id'); 

: 그것은 동적에 올 때 또한, 레일 생성 된 아이디의 나는 동적 링크를 얻고 선택기에 그것을 전달하는 변수를 만들 조금 jQuery를 사용 형태는 내가이 위의 튜토리얼을 따라 일을 가지고, 심지어 새로운 사용자 및 편집을 추가하는 작업을 수정할 수 있었다, 어쨌든

'#' + myid 

전달합니다.

관련 문제