簡體   English   中英

干掉js.erb文件(包括另一個js.erb文件)

[英]DRY up js.erb files (include another js.erb file)

我的大多數js.erb文件底部都包含這樣的內容:

$("#flash_message").html("<%= escape_javascript(content_tag(:p, flash[:note], :class => "note")) %>");
$("#flash_message").fadeOut(2000);
$("#loading").remove();

我想將這些行移動到一個單獨的文件中,然后從我的每個js.erb文件中調用該文件。 有可能嗎?

最好的祝福。 AsbørnMorell

是的,您可以創建一個app/views/shared/_flash_messages.js.rjs partial,然后可以從任何地方(例如從其他rjs partials)渲染。

我在這些應用程序中的方法如下:

  • 對於可能有閃存的非AJAX響應:

    • 在布局中(例如layouts/application.erb ),添加例如:
      render :partial => 'shared/flash_messages.html.erb'
  • 對於可能還需要顯示flash消息的AJAX響應,我添加了以下rjs代碼:

    • 在每個rjs響應中(例如controller/action.js.rjs ),添加例如:
      render :partial => 'shared/flash_messages.js.rjs'

如果兩個部分執行渲染閃存所必需的操作,則根據需要調用flash.discard(:error)flash.discard(:notice)

示例app/views/shared/flash_messages.html.erb文件:

<% if flash[:error] %>
<div id="flash_message" class="error"><%= h(flash[:error]) %></div>
<% flash.discard(:error) %>
<% elsif flash[:notice] %>
<div id="flash_message" class="notice"><%= h(flash[:notice]) %></div>
<% flash.discard(:notice) %>
<% else %>
<div id="flash_message" style="display: none;" />
<% end %>

示例app/views/shared/flash_messages.html.rjs文件:

if !flash[:error].blank?
  page['flash_message'].
    replace_html(flash[:error]).
    removeClassName('notice').
    addClassName('error').
    show()
else
  page['flash_message'].
    replace_html(flash[:notice]).
    removeClassName('error').
    addClassName('notice').
    show()
end

也許是<%= render :partial => 'common' %>

http://api.rubyonrails.org/classes/ActionController/Base.html#M000633

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM