2012-05-14 1 views
0

저는 Rails 3.2에서 ajax 및 jQuery를 사용하여 CRUD 작업을 수행 할 수있는 백엔드를 개발했습니다. 아약스를 처리하기 위해 js.coffee 파일을 사용하는 여러 컨트롤러/뷰를 사용하여이 작업을 수행했습니다. 내보기에 대한 내 파일 구조의 예는 다음과 같습니다.Rails 3.2 jQuery Ajax 원격 양식에서 반복을 줄이려고 시도

views 
    users 
    index.html.erb 
    _form.html.erb 
    _edit_form.html.erb 
    _user.html.erb 
    create.js.coffee 
    edit.js.coffee   
    update.js.coffee 
    destroy.js.coffee 
    customers 
    index.html.erb 
    _form.html.erb 
    _edit_form.html.erb 
    _customer.html.erb 
    create.js.coffee 
    edit.js.coffee   
    update.js.coffee 
    destroy.js.coffee 
    email_blasts 
    index.html.erb 
    _form.html.erb 
    _edit_form.html.erb 
    _blast.html.erb 
    create.js.coffee 
    edit.js.coffee   
    update.js.coffee 
    destroy.js.coffee 
    . 
    . 
    . 
    . 

사용자보기와 고객보기 모두에 대한 create.js.coffee의 예는 다음과 같습니다. 정확한 패턴을 따르는 인스턴스 변수와 div 이름을 확인하십시오. 아래의 모든 coffeescript는 위에 나열된 모든 뷰에서 정확한 구조를 따릅니다. 위에 나열된 모든 create.js.coffee 파일은 사실상 동일합니다. 내 질문은 복제를 줄이는 가장 좋은 방법은 무엇입니까? 이 플러그인을 만들면 좋을까요? 도우미에 넣어야합니까? 내가 anyones에 도움을 주시면 감사하겠습니다 :(이전의 PHP 프로그래머 나처럼 레일이 처리하는 방법을 잘 모르겠어요 사용자 뷰

create.js.coffee!

$('#errors').empty() 
$('#errors').show() 
<% if @user.errors.any? %> 
    $('<%= escape_javascript(render :partial => "errors", :locals => {:target => @user })%>') 
    .appendTo('#errors') 
<% else %> 
    $('<%= escape_javascript(render(:partial => @user))%>') 
    .appendTo('#user_table') 
    .hide() 
    .fadeIn(200) 
$('#errors').hide() 
$('#new_user')[0].reset() 
$('#users_count').html '<%= users_count %>' 
<% end %> 
$('#error_close').click -> 
    $('#errors').fadeOut() 

create.js 일을 할 자바 스크립트 클래스를 확인하십시오. 당신이 자바 스크립트와 ERB를 혼합 중지 다시 사용하려는 경우, 당신은 당신의 코드를 구성해야

$('#errors').empty() 
$('#errors').show() 
<% if @customer.errors.any? %> 
    $('<%= escape_javascript(render :partial => "errors", :locals => {:target => @customer })%>') 
    .appendTo('#errors') 
<% else %> 
    $('<%= escape_javascript(render(:partial => @customer))%>') 
    .appendTo('#customer_table') 
    .hide() 
    .fadeIn(200) 
    $('#errors').hide() 
    $('#new_customer')[0].reset() 
    $('#customers_count').html '<%= customers_count %>' 
<% end %> 
$('#error_close').click -> 
    $('#errors').fadeOut() 

답변

0

고객 뷰에 대한 .coffee하고 페이지에 옆에 스크립트 태그의 데이터를 넣어 ...

Backbone.js와 같은 구조를 제공하여 도움이되는 프레임 워크를 사용해보십시오.

이 당신에게 도움이 될 수있다 :

또는 지저분한 방법 :

# Function 
foo = (condition, firstBlock, secondBlock) -> 
    $('#errors').empty() 
    $('#errors').show() 
    if condition 
    firstBlock 
     .appendTo('#errors') 
    else 
    secondBlock 
     .appendTo('#customer_table') 
     .hide() 
     .fadeIn(200) 
    $('#errors').hide() 
    $('#new_customer')[0].reset() 
    $('#customers_count').html '<%= customers_count %>' 
    $('#error_close').click -> 
    $('#errors').fadeOut() 

# Execution 
foo(<% @user.errors.any? %>, $('<%= stuff %>'), $('<%= moreStuff %>')) 
+0

당신은 RailsCasts 프로 subscri이있는 경우 참조 할 수도 있습니다. http://railscasts.com/episodes/323-backbone-on-rails-part-1, http://railscasts.com/episodes/325-backbone-on-rails-part-2 – flooooo

+0

왜 erb와 javascript를 섞으면 코드를 재사용 할 수 있습니까? 서버 측 자바 스크립트를 사용하지 않고 필요한 것을 성취 할 수있는 방법이 있습니까? – ctilley79

+1

특정 상황에 대한 사전 설정 변수로 가득 찬 코드를 어떻게 다시 사용 하시겠습니까? 일반적이고 깨끗한 것을 재사용 할 수 있습니다.이 코드는 단지 구체적입니다. 따라서 일반 부품을 추출하여 필요한 곳에 매개 변수화해야합니다. 따라서 코드의 대부분은 erb와 모든 매개 변수로 호출 할 수있는 재사용 가능한 클래스의 각 페이지로 이동합니다. –