javascript - 在 format.html 和 format.js 之间显示 Rails3 Flash 消息?

标签 javascript jquery ruby-on-rails ruby-on-rails-3

我想在普通老式 HTTP 用户和我能够设计的 UJS 用户之间更清晰地共享 FlashHash 通知。请允许我先向您展示我拥有的东西:

首先,respond_to的一部分相关控制人的部分#update :

respond_to do |format|
  if @cont.save
    flash[:notice] = 'Continent was successfully updated.'
    format.html { redirect_to edit_continent_url(@cont) }
    format.json { head :ok }
    format.js

和一个update.js.erb匹配它:

$('#jsflash').html('<%= escape_javascript(render :partial => "application/notices/notice") %>').show();
<% flash.clear %> # clear the flash to avoid displaying on page reloads

同样在我的application.html.erb

<div id="jsflash"></div>
<%= render "application/notice/alert" %>

app/views/application/notices/_notice.html.erb :

<% unless flash[:notice].blank? %>
  <div class="alert-message info fade in" data-alert="alert">
    <a class="close" href="#">&times;</a>
    <%= content_tag :p, flash[:notice] %>
  </div>
<% end %>

我不喜欢的事情:

  1. 也许它是肛门的,但我宁愿不渲染<div id="jsflash"></div>除非我绝对必须这样做。
  2. <% flash.clear %>在更新 js 中存在以在页面重新加载时清除闪出。然而,这将变得非常乏味且容易出错,因为每个 JS View 都需要有这个可能会忘记包含它。
  3. <% flash.clear %> ,同样,这是 Angular 色的混淆, View 驱动应用程序状态。
  4. 看起来应该已经有一些工具可以做到这一点。我是否忽略了什么?

最佳答案

  1. 避免渲染 <div id="jsflash"></div>当不需要它时,您将希望将 flash block 包装在 if 语句中。你可以把这样的东西放在你的 Application.rb

.

 <% if flash.present? %>
   //Call your Render Flash Here
 <% end %>

2.3.4。我从来没有用过 flash.clear在我制作的数十个 Flash 应用程序中。您的 Flash 通话似乎也有一些不必要的重复。

关于javascript - 在 format.html 和 format.js 之间显示 Rails3 Flash 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8860686/

相关文章:

javascript - Node js URL解析

python - 如何从 jquery ajax 调用 python 处理程序?

javascript - 我怎样才能使用 anchor 标记提交一个表单与 jquery

ruby-on-rails - 是否值得尝试尽可能多地重用测试夹具?

javascript - 在一页上插入两个单独的图表 D3.js v4

javascript - 即时加载 Google 字体样式表以供预览

javascript - Jquery 无法在由 javascript 创建的表上运行

jquery - 使用 jQuery 问题切换元素样式

ruby-on-rails - 如何使用 "link_to"和 "current_page?"使用 RSpec 测试 Rails 插件

ruby-on-rails - 为Rails模型创建Elasticsearch索引时如何修复 “Illegal Argument Exception”?