为Flash通知设置超时

时间:2018-01-15 19:35:55

标签: javascript ruby-on-rails flash

def destroy
@cart.destroy if @cart.id == session[:cart_id]
session[:cart_id] = nil
respond_to do |format|
  format.html { redirect_to store_url,
    notice: 'Your cart is currently empty' }
  format.json { head :no_content }
end
end

我正在通过使用Rails 4的敏捷Web开发工作,在整本书中,他们让您创建一个带有购物车的网站。我要做的是确保在您清空购物车时弹出的通知消息在几秒钟后消失。目前,通知消息会一直保留在屏幕上,直到您刷新为止。我需要做些什么来确保这一点?我已经尝试过使用Javascript并创建一个.js.erb文件,但是,我似乎无法正确使用它。

1 个答案:

答案 0 :(得分:1)

为此你需要使用一些javascript。

最简单的方法是执行以下操作:

第1步:修改Flash消息输出

打开application.html或在您呈现Flash消息时,将它们包装在<div id="flash-messages">元素中。

例如,如果你有这个:

<% flash.each do |name, msg| %>
  <% if msg.is_a?(String) %>
    <%= content_tag :div, msg, :class => "flash_#{name}" %>
  <% end %>
<% end %>

以这种方式包裹它们:

<div id="flash-messages">
  <% flash.each do |name, msg| %>
    <% if msg.is_a?(String) %>
      <%= content_tag :div, msg, :class => "flash_#{name}" %>
    <% end %>
  <% end %>
</div>

第2步:使用一小段Javascript删除Flash消息

assets/javascript/application.js内,添加以下代码:

$(function(){
   var flashDurationInSeconds = 5;
   var flashContainerId = 'flash-messages';

   function removeFlashMessages() {
     $('#' + flashContainerId).remove();
   }

   setTimeout(removeFlashMessages, flashDurationInSeconds * 1000);
})

flashDurationInSeconds更新为您需要的持续时间,并flashContainerId更新您在步骤1中添加的ID。

完成!

这样,每个flash消息只会持续5秒,如你所愿。