ページのコンテンツを更新するためにリモート呼び出しを行う 1 つのページに多数のリンクがあります。すべてが完璧に機能するので、コンテンツをロードする要素にオーバーレイを追加して、何かが起こっていることを視覚的に参照できるようにすることにしました。
したがって、オーバーレイを表示する各リンクに、クラスを追加し、オーバーレイを表示する div に渡す data 属性を介して追加します。ここにいくつかのコード例があります。
<div id="content">Old Content</div>
<%= link_to "Update Content", some_path, :class => 'ajax_trigger', :remote => true, 'data-target' => 'content' %>
わかりましたので、クリックすると実行され、respond_to ブロック format.js でデータが読み込まれ、そこでコンテンツが置き換えられます。つまり、
$("#content").html("<%= escape_javascript(render(:partial => '/shared/content')) %>")
そして、私が言ったように、すべてがうまく機能します。わかりましたので、オーバーレイを行うための JS (コーヒー スクリプト) のグローバル ビットがあります。
$(".ajax_trigger").live("ajax:beforeSend", (evt, data, status, xhr) ->
# Get target div to add overlay
target = $(this).data('target')
$t = $("#"+target)
# Update CSS for Overlay
$("#overlay").css
opacity: 0.7
top: $t.offset().top
left: $t.offset().left
width: $t.outerWidth()
height: $t.outerHeight()
# Update Image for Overlay
$("#img-load").css
top: ($t.height() / 2)
left: ($t.width() / 2)
# Show Overlay
$("#overlay").fadeIn()
).live("ajax:success", (evt, data, status, xhr) ->
$("#overlay").fadeOut()
).live "ajax:error", (evt, data, status, xhr) ->
alert "Failed!"
これは、ページ上の 2 つのアイテムに最適ですが、1 つのアイテムではオーバーレイが表示されますが、非表示にはなりません。もちろん、 ajax:alert で警告が表示されるため、エラーは発生しません。コンテンツはオーバーレイに完全に読み込まれるため、すべて問題ありません。
どのように違いがあり、良い反応を得てコンテンツが置き換えられたにもかかわらず、なぜそれが隠されないのかわかりません。
これをデバッグする方法について何か提案はありますか?