2017-02-26 67 views
0

我使用railsmaterialize toasts显示闪光灯消息。这里是代码我使用显示烤架中每个闪光灯的不同烤面包机

<% unless flash.empty? %> 
    <script> 
     <% flash.each do |f| %> 
     <% type=f[0].to_s.gsub('alert', 'red').gsub('warning', 'deep-purple').gsub('success', 'green') %> 
     Materialize.toast('<%= f[1] %>', 4000, '<%= type %>') 
     <% end %> 
    </script> 
<% end %> 

的问题是,这不会splitflash messagesdifferent toasts,而不是显示所有在single toast。我怎样才能让每个flash显示在它自己的toast

回答

1

闪烁重新组合在类型/值的散列中。我建议你创建一个帮手来包装闪烁的演示文稿标签

flash的值很可能是单个字符串或数组或字符串。我个人使用闪光灯周围的包装,让我推我想要的相同类型的闪光灯

下面的代码处理字符串或数组闪烁。注意flash.each do |type, content|

def flashes 
    content_tag(:div, class: 'flash-group') do 
    flash.each do |type, content| 
     if content.respond_to?(:each) 
     # If you have an array of flashes, regroup them under the same "flash" block 
     concat(single_flash(type, flash) do 
      # The flash messages are added as a list 
      content_tag(:ul) do 
      content.flatten.each do |message| 
       msg = if message.respond_to?(:html_safe) 
       message.html_safe 
       else 
       msg 
       end 
       concat(content_tag(:li, msg)) 
      end 
      end 
     end) 
     else 
     concat(single_flash(type, content.html_safe)) 
     end 
    end 
    end 
end 

此包装是有点儿框架无关,你可以定义single_flash不过你想要的,只是用<%= flashes %>在布局中。

为你的材料实现你必须像

def single_flash(type, content = nil) 
    type_class = case type 
    when 'alert' 
    'red' 
    when 'warning' 
    'deep-purple' 
    when 'success' 
    'green' 
    else 
    '?' 
    end 
    Materialize.toast(content, 4000, type_class) 
end 

比如我举实施

# Render a single flash, styles according to the flash type 
    def single_flash(type, content = nil) 
    alert_class = ['alert alert-dismissible media'] 
    contextual_class = case type.to_sym 
    when :alert, :danger, :error, :fatal 
     'danger' 
    when :warning, :todo 
     'warning' 
    when :notice, :success 
     'success' 
    else 
     'info' 
    end 
    alert_class << "alert-#{contextual_class}" 
    close_class = "close text-#{contextual_class}" 
    content_tag(:div, class: alert_class, role: 'alert') do 
     concat(content_tag(:div, class: 'flash-icon media-left media-middle') do 
     font_awesome(case type.to_sym 
     when :fatal, :error 
      'exclamation-triangle' 
     when :danger, :warning 
      'exclamation-triangle' 
     when :success 
      'check' 
     when :notice, :info 
      'info-circle' 
     else 
      'question' 
     end) 
     end) 
     concat(content_tag(:div, class: 'flash-message media-body') do 
     block_given? ? yield : simple_format(content) 
     end) 
     concat(content_tag(:div, class: 'media-right media-middle') do 
     concat(content_tag(:button, class: close_class, 'data-dismiss': 'alert') do 
      concat(content_tag(:span, aria_hidden: true) {'&times;'.html_safe }) 
      concat(content_tag(:span, class: 'sr-only') { 'Close' }) 
     end) 
     end) 
    end 
    end