2012-01-02 71 views
2

因此,我相信你們都很熟悉,你可以在Rails中調用html.erb文件。您還可以設置遠程渲染的調用嵌入式ruby文件的操作(例如,向「posts」控制器提交「post」表單,遠程處理它,並調用js.erb文件以更新頁面中的元素)。如何在頁面加載中加載嵌入式ruby JavaScript文件?

我想知道的是當我運行加載模板(html.erb文件)的操作時如何運行js.erb文件。爲了解釋,考慮如果我想運行一個用戶顯示頁面:

class UsersController < ApplicationController 
    def show 
    @user = User.find(params[:id]) 
    end 
end 

鏈接到user_path(User.find(1))將加載show.html.erb,一切似乎很大。

但是如果我想點擊一個鏈接到user_path(User.find(1))並加載show.html.erb,同時也加載show.js.erb?如果(並且我希望是這樣)這是可能的,那麼我怎樣才能使節目定義適應也加載show.html.erbcustom_js_file_name.js.erb

FYI:我用Rails 3.0.9和3.1.3兩個不同的應用程序,並假定我會把show.js.erb或任何其他的用戶文件夾(的意見/用戶/ ...

回答

1

默認情況下,

def show 
    @user = User.find(params[:id]) 
end 

只會渲染基礎上,如果它是通過HTML,JSON,JS要求show視圖等

我想您所描述的是更適合的在Rails中使用render方法。通常,控制器在respond塊中使用不同的format.(:format)方法來根據請求類型(JSON,HTML,JS等)響應控制器調用。

在你show.html.erb文件:

<%= render "users/show.js" %> 

這可以讓你呈現你在你的看法又一個希望的任意文件。這也讓您能夠將大型視圖文件分爲叫做諧音較小的(可重複使用)條(注:所有片段命名時使用在開始時_字符,並通過<%= render :partial => "users/my_partial" %>被稱爲這將使得_my_partial.some_format.erb文件)

+0

這將執行代碼作爲嵌入式JavaScript? (即將包含警報('Hello World')的文件;導致顯示警報 – jay 2012-01-02 21:48:49

+0

只要您將其包裝在典型的腳本標記和DOM準備好的JavaScript包裝器中,該呈現的代碼將在頁面加載時執行 – iwasrobbed 2012-01-03 00:46:49

-1

嘗試讓show操作在請求時呈現show.js.erb文件,格式爲js。這應該讓Rails呈現動態模板;現在鏈接到它從原始show.html.erb與JavaScript鏈接標記。

show.html.erb

<script type="text/javascript" src="<%= show_users_path(@user.id) -%>.js"></script> 

我還沒有嘗試這樣做的show.js.erb渲染可以將其他格式,這將是一個問題。

相關問題