Отображать Flash-сообщения Rails3 между format.html и format.js? - PullRequest
3 голосов
/ 14 января 2012

Я хотел бы более аккуратно делиться уведомлениями FlashHash между простыми старыми пользователями HTTP и людьми UJS, которые мне удалось придумать.Позвольте мне показать вам, что у меня есть сначала:

Во-первых, часть секции 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. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *, поэтому в нем не разрешено '}случай перезагрузки страницы.Однако это станет действительно утомительным и подверженным ошибкам, так как каждое представление JS должно иметь это , но может забыть включить его.
  3. <% flash.clear %>, аналогично, это путаницаролей, с представлением, управляющим состоянием приложения.
  4. Кажется, что для этого уже должно быть какое-то средство.Я что-то упустил из виду?

1 Ответ

1 голос
/ 08 февраля 2012
  1. Чтобы избежать рендеринга <div id="jsflash"></div>, когда он не нужен, вы захотите обернуть флэш-блок в оператор if. Вы можете поместить что-то вроде этого в свой Application.rb

.

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

2.3.4. Мне никогда не приходилось использовать flash.clear в десятках флеш-приложений, которые я сделал. У вас также, кажется, есть некоторое ненужное дублирование с вашими флеш-вызовами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...