2009-03-02 31 views
8

Hầu hết các tập tin js.erb tôi chứa một cái gì đó như thế này ở phía dưới:KHÔ lưu các tập tin js.erb (bao gồm một tập tin js.erb)

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

Tôi muốn di chuyển những dòng này vào một file riêng biệt và sau đó gọi tệp đó từ mỗi tệp js.erb của tôi. Là một cái gì đó như thế có thể?

Trân trọng. Asbørn Morell

Trả lời

7

Vâng, bạn có thể tạo ra một phần app/views/shared/_flash_messages.js.rjs, sau đó bạn có thể làm từ bất cứ nơi nào (ví dụ như từ rjs partials khác.)

Tiếp cận của tôi trong các loại ứng dụng đã được như sau:

  • cho phản ứng phi AJAX mà có thể có một đèn flash:

    • trong bố cục (ví dụ: layouts/application.erb), thêm ví dụ:
      render :partial => 'shared/flash_messages.html.erb'
  • để được trả lời AJAX mà cũng có thể cần để hiển thị tin nhắn nhấp nháy, tôi đã thêm các rjs mã sau:

    • trong mỗi câu trả lời rjs (ví dụ controller/action.js.rjs), thêm ví dụ:
      render :partial => 'shared/flash_messages.js.rjs'

Trong trường hợp hai partials làm cần thiết để hiển thị flash, sau đó gọi flash.discard(:error) hoặc flash.discard(:notice) nếu thích hợp.

mẫu app/views/shared/flash_messages.html.erb file:

<% 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 %> 

mẫu app/views/shared/flash_messages.html.rjs file:

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

Thankyou. Đây chính xác là ví dụ mà tôi đã hy vọng. Các tệp js.erb của tôi giờ đã sạch hơn nhiều;) – atmorell

Các vấn đề liên quan