2017-02-03 4 views
1

내 Rails 5/Turbolinks 5 응용 프로그램에서 양식 제출 결과로 div에 넣고 싶습니다.Turbolinks 5 ajax POST

폼은

= form_for(user) do |f| 

표준 레일 형태이다. 내가 아약스를 통해 양식을 제출할 때

성공적으로 제출 한 후 리디렉션은 브라우저

respond_to do |format| 
     if @user.save 
     format.html { redirect_to @user, notice: 'User was created.' } 

로 전송된다

$(".dialog").on("submit", "form", function(e){ 
e.preventDefault(); 
$.ajax({ 
    url: $(this).attr("action"), 
    method: "POST", 
    data: $(this).serialize() 
}).done(function(data) { 
    $(".dialog .canvas").html(data); 
}); 
}); 

로부터 제출 가져와 서버의 redirect_to 문은 브라우저를 리디렉션 새 사용자의 페이지

리디렉션은 터보 링크로 인해 본문이 브라우저가 리디렉션 된 페이지의 내용으로 바뀝니다. 대신 나는 특정 div $ (". dialog .canvas") .html (data)을 대체하려고합니다. 어떻게 터보 링크의 이러한 동작을 방지 할 수 있습니까?

+0

당신은 컨트롤러 코드를 추가 할 수 있습니까? 내 생각 엔 리디렉션하지 말고 요청에 대한 응답을 렌더링하는 것입니다. –

+0

이 비디오를 통해 도움이됩니다. http://railscasts.com/episodes/205-unobtrusive-javascript – WaKeMaTTa

답변

0

제대로 처리하려고하면 서버에서 HTML을 렌더링하고 서버에서 생성 한 JavaScript를 사용하여 div 요소를 업데이트 할 수 있습니다.

js.erb 파일에는 Ruby와 JavaScript를 사용할 수 있습니다. 나는 HTML과 동적 인 내용을 구축하고 JavaScript로 실행되도록 클라이언트에게 다시 전달하는 데 매우 유용하다는 것을 알았다.

사람들은 서버에서 생성 된 JavaScript의 장단점에 대해 토론 할 수 있지만, 완벽하게 훌륭하다고 생각합니다. 그렇지 않으면 서버/클라이언트 템플릿을 동기화 상태로 유지해야합니다. 또는 모든 클라이언트 측 템플릿을 수행하고 JSON 용 서버 만 사용해야합니다.

나는 클라이언트/서버를 미래의 방식으로 해체하는 것을 볼 수 없지만 모든 것이 진행되는 방향이라고 주장하는 사람들이 많이 있습니다. 자바 스크립트 MVC 프레임 워크의 과다한 모습이 보일뿐입니다. 옵션을 추가 컨트롤러에 turbolinks 5.0.1로

0

, turbolinks: false format.html { redirect_to @user, notice: 'User was created.', turbolinks: false }

기타 솔루션 (당신이 레일 5.1로 업데이트 할 수 없기 때문에 그렇게 좋지 않다) 2.5.3을 turbolinks에 충실하는 것입니다 .

format.js 또는 format.json를 사용하여 다른 솔루션, 확인이있을 수 : https://github.com/vtamara/turbolinks_prob50