2012-10-16 33 views
2

我有一個網站使用不顯眼的ajax。如何將代碼包含到js.erb視圖中?在導軌3

總之,流程是:

  • 遠程鏈接
  • 請求由控制器管理
  • js.erb視圖發送響應返回給瀏覽器

我想我所有的JS。 erb視圖執行類似的「維護活動」,例如在需要時插入flash消息,更新url等。

我該如何製作這款DRY?理想情況下,我會使用部分代碼執行每次,但我無法找到如何執行此操作。

更新1:例如

我js.erb文件:

$("#challenge_actions").html("<%= escape_javascript(render partial: "challenges/best_practice_button")%>"); 
$("#flash_messages").html("<div id='flash_notice'><%= escape_javascript(flash[:notice])%></div>"); 

我怎樣才能提取與flash_messages線,並將它自動包含在我所有的js.erb文件?

謝謝!

回答

3

您可以使用js佈局,就像html佈局一樣。

佈局/ custom.js.erb

alert("<%=j flash[:notice] %>"); 
<%= yield %> 

控制器/ your_controller.rb

def your_action 

    flash[:notice] = "hello world" 
    @hello = "hello world" 

    respond_to do |format| 
    format.js { render layout: "custom" } 
    end 
end 

your_action.js.erb

alert("<%= j @hello %>"); 
+0

這樣做會首先觸發maintenance.js.erb,然後觸發your_action.js.erb?恐怕不是。但這是我需要的。實際上與before_filter類似。 – ndemoreau

+0

@ndemoreau我看錯了這個問題。更新了答案。 – emrahbasman

+0

優秀!非常感謝! – ndemoreau

0

您可以使用ERB的部分模板,以及,假設你要替換ID爲「容器」的div的內容,那麼假設你正在使用jQuery你可以做

$('#container').html('<%= escape_javascript(render(:partial => 'mypartial'))%>') 
+0

是,但可以部分是一個.js.erb文件?請參閱更新1 – ndemoreau