СУХОЙ файл js.erb (включая другой файл js.erb) - PullRequest
8 голосов
/ 02 марта 2009

Большинство моих файлов js.erb содержат что-то вроде этого внизу:

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

Я хотел бы переместить эти строки в отдельный файл, а затем вызвать этот файл из каждого из моих файлов js.erb. Возможно ли что-то подобное?

С уважением. Асборн Морелл

Ответы [ 2 ]

7 голосов
/ 02 марта 2009

Да, вы можете создать app/views/shared/_flash_messages.js.rjs партиал, который затем можно рендерить из любого места (например, из других rjs партиалов).

Мой подход в таких приложениях был следующим:

  • для ответов без AJAX, которые могут иметь вспышку:

    • в макете (например, layouts/application.erb), добавьте, например:
      render :partial => 'shared/flash_messages.html.erb'
  • для ответов 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
0 голосов
/ 02 марта 2009

<%= render :partial => 'common' %>, возможно?

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

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