2012-05-14 45 views
0

我開發了一個Rails 3.2後端,允許管理員使用ajax和jQuery執行CRUD操作。我用幾個控制器/視圖使用js.coffee文件來處理ajax。我的視圖的文件結構示例如下。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名稱。下面的所有咖啡標記都遵循上面列出的所有視圖的確切結構。上面列出的所有create.js.coffee文件實際上是相同的。我的問題是減少重複的最佳方法是什麼?這會是我應該創建一個插件的東西嗎?我應該把它放進一個幫手......等等。我不知道如何處理這種在軌爲我是一名前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 .coffee的客戶視圖

$('#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

,如果你想重新使用它停止混合JavaScript和再培訓局應該組織你的代碼和。讓JavaScript類哪做的工作,並把數據側面的腳本標籤頁面...

嘗試使用一些框架,通過給像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爲什麼重複使用代碼更難?有沒有辦法在不使用服務器端JavaScript的情況下完成我所需要的功能? – ctilley79

+1

您想如何重用特定情況下充滿預設變量的代碼?你可以重用通用和乾淨的東西,這段代碼只是特定的。因此,您需要提取泛型部分,並在需要時將其稱爲參數化。所以大部分代碼都在可重用類中,每個使用它的頁面都可以用erb和所有參數調用它。 –