0

管理者が ajax と jQuery を使用して CRUD 操作を実行できるようにするバックエンドを Rails 3.2 で開発しました。js.coffee ファイルを使用して 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
  .
  .
  .
  .

User ビューと Customer ビューの両方の create.js.coffee の例を以下に示します。正確なパターンに従っているインスタンス変数と div 名に注意してください。以下のすべての coffeescript は、上にリストしたすべてのビューの正確な構造に従います。上記のすべての create.js.coffee ファイルは実質的に同一です。私の質問は、重複を減らすための最良の方法は何ですか? これは、プラグインを作成する必要があるものでしょうか? ヘルパーに入れようかな…などなど。私は元PHPプログラマーであるため、レールでこれを処理する方法がわかりません:(誰の助けもいただければ幸いです!

User ビューの 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() 

Customer ビューの 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()
4

1 に答える 1

0

コードを構造化する必要があり、再利用する場合は、javascript と erb を混在させるのをやめてください。ジョブを実行し、データをページのスクリプト タグの横に配置する 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 %>'))
于 2012-05-15T11:44:45.233 に答える