にJavaScriptコードを改善します私のビューファイル:は、私はRailsの3.0.7にルビーを使用していると私は私が<em>リファクタリング</em>、<em>DRY</em>(自分を繰り返してはいけない)と<em></em>に、次のコードを改善する方法をお知りになりたいビューファイル
<% articles.each do |article| %>
<div>
<%= link_to 'add', '#', :id => "create_#{article.id}" %>
</div>
<script type="text/javascript">
# Code - Block 1
$jQ('#create_<%= article.id %>').live('click', function(event) {
$jQ.ajax({
type: "POST",
url: "<%= article_url(@article) %>/create",
data: "article_id=<%= @article.id %>",
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + ' - ' + errorThrown + '\n\n' + jqXHR.responseText);
},
success: function(data, textStatus, jqXHR) {
$jQ('#create_<%= article.id %>').replaceWith('<%= escape_javascript("added") + (link_to 'remove', '#', :id => "destroy_#{article.id}") %>')
}
});
});
# Code - Block 2
$jQ('#destroy_<%= .id %>').live('click', function(event) {
$jQ.ajax({
type: "POST",
url: "<%= article_url(@article) %>/destroy",
data: "article_id=<%= @article.id %>,
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + ' - ' + errorThrown + '\n\n' + jqXHR.responseText);
},
success: function(data, textStatus, jqXHR) {
$jQ('#destroy_<%= article.id %>').replaceWith('<%= escape_javascript("removed") + (link_to 'add', '#', :id => "create_#{article.id}") %>')
}
});
});
</script>
<% end %>
注:
each
声明!- 上記の2つのコードブロックはほぼ同じです。
定義をすべて1つの場所に保存するために、[[:create、 'added']、[:destroy、 'removed']]ループを繰り返すと思います。 –
私は同意します。それは読みやすくなります。 – spd
これは私が言ったことです。あなたのコードを複製していましたが、2つのイベントがコールバックやその他のものと大きく異なることが判明したときに、重複が必要になることがあります。これを念頭に置いてください。線を減らすのはいいですが、必ずしも有益なわけではありません。ルーピングにはさらに処理(時間)が必要です。 – vol7ron