2010-01-15 3 views
0

나는 사용자가 클릭 제출하면 DB 또는 데이터의 데이터가 다른 웹 사이트에서 긁어 있도록 100 %레일 아약스 배경

, 그것은 잡고 밖으로 간다 작동하는 remote_form을 요청하고 원활 페이지 ...

를 업데이트

지금 문제는 같은 일을하고 싶지만 사용자가 onload 이벤트가있는 제출 버튼을 클릭하지 않아도됩니다. 나는 잘못된 방향으로 가고 있다고 생각한다 :

기술적으로 이것은 작동한다 ... 올바른 데이터를 얻지 만, 정확히 remote_form_tag가하는 일을 수행하는 대신에 raw 데이터를 반환한다. RJS replace_html이 없습니다.

form_for를 건너 뛰고 페이지가로드 될 때 컨트롤러 동작을 직접 실행하는 방법이 있습니까?

<script type="text/javascript"> 
    $(window).load(function() { 
     // executes when HTML-Document is loaded and DOM is ready 
     // jQuery.facebox('Big loading! <img alt=\"Loading\" src=\"/images/loaders/loading.gif\" />'); 
     //$("#update_form").submit(); 
     $("#update_form").submit(function() { return false; }); 

    }); 
</script> 

#html.erb 
<% form_remote_tag :url => { :action => "update_availables", :id => params[:id] }, 
    :loading => "jQuery.facebox('Big loading! <img alt=\"Loading\" src=\"/images/loaders/loading.gif\" />');", 
    :html => { :method => "get" }, 
    :method => "get", 
    :html => { :id => 'update_form' } do %> 

컨트롤러의 형태

def update_availables 
    @do_it = Available.get_new_availables :id => params[:id], :date => user_cart.getDate.to_s 
    get_availables 

    respond_to do |format| 
     format.html 
     format.js 
    end 
    end 

RJS

page.replace_html :rooms, :partial => "available" 
page << "jQuery.facebox.close();" 

답변

4

그럼, 양식을 사용할 수 클릭 사용자와 동일한 기능을 얻을 수 있습니다 자바 스크립트 click 방법 : 당신은 모든 형태의 데이터를 넣어 이유를 사용자로부터 입력없이 제출하는 경우

$(window).load(function() { 

    $("#update_form input[type='submit']").click(); 

}); 

하지만, 왜 바로 조치를 호출하는 부하 처리기에서 아약스 호출을 넣지 및 코드를 직접 업데이트합니까?

$(window).load(function() { 

    $.ajax({ 
     type: "GET", 
     url: "scraper_url", 
     data: {field1:val,field2:val}, 
     success: function(responseText){ 
     // update page 
     } 
    }); 

}); 
1

여기에 floyd에 동의합니다. 일반적으로 이런 유형의 접근 방식은 RJS를 사용하여 페이지를 업데이트하는 대신 Rails 액션에서 필요한 JSON 데이터를 반환하는 것입니다. 이것은 JSON이 생성하는 것이 일반적으로 매우 빠르다는 이점을 가지고 있으며, 쉽게 to_json 메소드로 모델로 옮겨지고 많은 다른 상황에서 재사용 될 수 있습니다.

페이지를 업데이트하는 것이 간단하면 인라인으로 할 수없는 이유는 없지만 더 복잡한 경우 정적 자바 스크립트 파일의 함수로 정의 할 수 있습니다. 그 접근법에 대한 좋은 점은 자바 스크립트와 루비 코드를 모듈화하고 분리 된 상태로 유지한다는 것입니다. Javascript 코드가 제한된 RJS 메소드에 의해 유출 된 "추상화 된"(모호함과 같이)보다는 자체적으로 있기 때문에 디버그 및 유닛 테스트가 더 쉽습니다. 또한 정적 자바 스크립트 파일 캐싱의 성능 이점을 얻을 수 있습니다.

웹을 살펴보면 최근에 Rails 블로그에 RJS에 대한 언급이 많지 않다는 것을 알게 될 것입니다. RJS가 2006 년에 인기있는 아이디어 였지만 자바 스크립트 우수 사례가 발전함에 따라 사용하지 못했기 때문입니다. 이를 이해하려면 AJAX의 역사를 살펴 봐야합니다. Rails는 2005 년에 AJAX를 지원하는 최초의 프레임 워크 중 하나였으며 실제로는 최초의 현대 Javascript 프레임 워크 였지만 여전히 가장자리가 거친 Prototype을 사용했습니다. 당시 매우 많은 웹 개발자들이 Javascript를 피할 방법을 찾고 있었는데, 이는 DOM 비 호환성으로 인해 끔찍한 명성을 얻었습니다. 그러므로 사람들은 Rails 헬퍼를 사용하여 모든 것을 문서화하기에 조금 과소했습니다.사람들이 매우 단순한 AJAX로 놀랐을 때 훌륭한 것이었지만 Javascript 프레임 워크가 성숙하고 사람들이 Javascript 기능으로 더욱 야심 차게되면 Javascript가 일류 시민이 될 자격이 있다는 것이 분명해졌습니다. 요즘 jQuery는 일반적인 자바 스크립트 작업을 간결하고 우아하게 만들어 초기 Rails 헬퍼가 기본 기능이 작동하더라도 어색한 것으로 보입니다. RJS에 대한 유용한 유스 케이스가 아직 많이 있지만 수년간 사용해 본 적이 없으며 전혀 놓치지 않았습니다.

제 조언은 자바 스크립트를 사용하는 것입니다. Douglas Crockford가 Javascript: The Good Parts을 가져 와서 jQuery와 많은 시간을 보냅니다. 당신은 잘 보상받을 것입니다.

+0

RJS의 페이딩 사용에 전적으로 동의합니다. 그것은 영리한 생각 이었지만, 실제로 그것을 결코 좋아하지 않았습니다. 물론 개발자들이 모든 사용자 정의 JS를 눈에 거슬리지 않게 만드는 것은 어렵습니다 ... – tfwright