我使用javascript在我的rails應用程序中顯示Flash消息(基本上每個Flash消息都是覆蓋div)。刷新刷新
以下部分包含在我的主佈局文件中,它負責顯示閃存。我注意到,如果我刷新頁面,同一個Flash消息不斷重現。無論如何擺脫這一點?我知道我可以調用flash.discard,但不知道最好的地方是做什麼,我不希望另一個控制器調用放棄閃光燈。
<% if !flash.nil? %>
<% if flash[:notice] %>
<script type="text/javascript">
//<![CDATA[
showFlash("<%= flash[:notice] %>", "flash-notice");
//]]>
</script>
<% end %>
<% if flash[:success] %>
<script type="text/javascript">
//<![CDATA[
showFlash("<%= flash[:success] %>", "flash-success");
//]]>
</script>
<% end %>
<% if flash[:error] %>
<script type="text/javascript">
//<![CDATA[
showFlash("<%= flash[:error] %>", "flash-error");
//]]>
</script>
<% end %>
<% end %>
function showFlash(msg, tp) {
if ($('#flash_messages_container').length > 0) {
flashAnimatedHide();
}
var flashContainer = $("<div id='flash_messages_container' class='flash-messages " + tp + " '></div>");
flashContainer.prepend("<div id='flash_messages_content'>" + msg + "<span class='go-right sprite close' id='close_flash'></span></div>");
$('body').prepend(flashContainer);
flashContainer.animate({
opacity : .1
}, '500', function(){
flashContainer.css('opacity', 1)
})
$('body').css('margin-top', flashContainer.outerHeight());
$('#close_flash').click(function() {
flashAnimatedHide();
$('body').css('margin-top', '0');
});
}
UPDATE
我懷疑這種情況正在發生,因爲我開始使用的ETag爲cient側和反向代理緩存。所以我猜刷新只是加載緩存頁面,其中包含Flash容器中的Flash消息。那麼當啓用緩存時人們如何放棄閃存?
我正在做一個flash.now [:notice] =「註銷」redirect_to_back_or_default root_path。奇怪的是,我甚至沒有看到最初的閃光消息。我認爲我的問題與緩存有關,重複閃存的第二次刷新直接從瀏覽器緩存中提供(這是一個304未修改的響應),瀏覽器緩存版本的頁面包含原始的Flash消息。不知道如何清除它。 – badnaam 2010-10-20 04:10:43
'flash.now'用於'render',而'flash'用於'重定向'。如果你在'redirect'上使用'flash.now'(就你的情況而言),這些Flash信息將會丟失。如果在'render'中使用'flash',則刷新後或者轉到其他頁面時將複製閃爍消息。這可能是Flash的工作原理而不是緩存。 – PeterWong 2010-10-20 06:13:00
順便說一句,向下選民你能介意解釋爲什麼投票嗎? – PeterWong 2010-10-20 06:13:58