"); $("#flash_message").fadeOut(2-6ren">
gpt4 book ai didi

jquery - 干燥 js.erb 文件(包括另一个 js.erb 文件)

转载 作者:行者123 更新时间:2023-12-03 22:32:56 24 4
gpt4 key购买 nike

我的大多数 js.erb 文件底部都包含类似这样的内容:

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

我想将这些行移到一个单独的文件中,然后从每个 js.erb 文件中调用该文件。这样的事情可能吗?

最诚挚的问候。阿斯伯恩·莫雷尔

最佳答案

是的,您可以创建一个 app/views/shared/_flash_messages.js.rjs 部分,然后您可以从任何地方(例如从其他 rjs 部分)渲染它。 )

我在此类应用程序中的方法如下:

  • 对于可能有闪烁的非 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 所需的操作,则根据需要调用 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

关于jquery - 干燥 js.erb 文件(包括另一个 js.erb 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/602934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com