首页 > 解决方案 > Rails - 为特定用例定制 Flash 消息

问题描述

我对 ruby​​ on rails 完全陌生。请帮助我解决以下用例。

默认情况下,flash 消息在 application.html.erb 中配置为超时并在几秒钟内淡出

<div id="message" class="modal alert alert-error fade clear" data-alert="alert">
    <%= flash[:notice] %>  
</div> 

用于设置 Flash 超时的 Javascript 代码:

 var showFlashMsg = function(){
<%if flash[:notice].nil?%>
    return false;
<%else%>
    return true;    
<%end%>}



if(showFlashMsg()){
    window.setTimeout(function () {
        showMsg();
    }, 100);

    window.setTimeout(function () {
        closeMsg();
    }, 500);
  }   

showMsg() 和 closeMsg() 包含 #message.show() 和 #message.hide() 函数。

但是我试图通过使特定的闪存警报消息用户可关闭(即,将关闭按钮添加到闪存警报)来覆盖上述行为 - 以防在我提交特定表单时触发闪存消息。

因此,在这种情况下,我需要通过添加关闭按钮并删除这些闪存的 closeMsg() 超时来覆盖为闪存设置的默认行为。除了显示表单提交响应的 Flash 消息外,由同一控制器和相同操作触发的所有其他 Flash 消息都应遵循上述在几秒钟内淡出的行为。

请给我一些关于如何使用javascript和rails仅为特定表单提交响应自定义flash消息的建议?

提前致谢 !!!

标签: javascriptjqueryruby-on-rails

解决方案


我将代码的第一部分重写为:

 var showFlashMsg = <%= !flash[:notice].nil? %>

然后假设您知道您在通知中要查找的字符串:

<% special_string = "This is the special flash notice" %>
var showFlashMsg = <%= !flash[:notice].nil? %>
var setTimeout = <%= flash[:notice] && flash[:notice] != special_string %>

if(showFlashMsg){
  window.setTimeout(function () {
    showMsg();
  }, 100)
}
if (setTimeout){
  window.setTimeout(function () {
    closeMsg();
  }, 500);
}

如果不是 nil, 这将设置showFlashMsg为 true,如果它不是 nil,则设置为 true ,并且也不等于特殊字符串。flash[:notice]setTimeout


推荐阅读