我花了很多時間挖掘鏈輪和tit的源代碼,試圖找出如何將變量/綁定傳遞給Erb評估上下文。這是我想要做的:我需要提供一個JS文件,其內容根據每個請求進行更改。更改的部分取決於存儲在數據庫中的數據,因此需要通過Rails應用程序路由請求並需要傳遞變量/綁定。最重要的是,JS文件使用require
指令插入其他JS文件,因此需要使用鏈輪。Sprockets>如何爲Erb評估/渲染指定綁定?
這裏是不工作的代碼片段:
Controller文件:
def ever_changing_js
@foobars = Foobar.all
MyApp::Application.assets.instance_eval do
def foobars
@foobars
end
end
render :text => MyApp::Application.assets.find_asset('ever_changing.js').to_s, :content_type => "application/javascript"
end
ever_changing.js:
//= require file1.js
//= require file2.js
// Some code that uses @foobars
我怎樣才能得到這個工作?任何幫助,將不勝感激。
感謝您的回答ssorallen。不幸的是,在我的情況下沒有關聯的模板文件。讓我解釋。有問題的JS可被應用程序的各種用戶用於在其網站上呈現小部件。 (想想人們在他們的網站上安裝的實時聊天小部件)。現在每個用戶可能有不同的設置+需要被引用到JS文件中的數據。我想將JS的靜態部分和JS的動態部分封裝到一個文件中並提供它。這有意義嗎? –
Google Maps等JavaScript API爲每個客戶端提供相同的JS,並要求客戶端實例化他們想要的對象和API。 –
如果您真的*想要一個動態JavaScript文件,請將您的模板命名爲'.js.erb',並且Rails將爲請求返回JavaScript的正確MIME類型。它應該生活在'app/views'而不是'app/assets'中。 –