2011-12-06 57 views
2

我想製作一個通用控制器,可以在頁面加載後(使用AJAX)調用,並根據控制器調用它來更新頁面上的不同內容。不能在coffeescript中渲染coffeescript部分

其目的是允許更好的頁面和片段緩存,同時顯示用戶的自定義元素。

我的框架是這樣的:

controllers/general_ajax_controller.rb 
views/general_ajax/on_page_load.js.coffee 
       ./_update_some_stuff.js.coffee 

控制器中的on_page_load動作處理找出哪些泛音加載和視圖將使泛音的邏輯。

on_page_load.js.coffee視圖我有此代碼(簡化):

<%= render "update_some_stuff" %> 

應該使局部的。相反,我得到這個錯誤:

ActionView::Template::Error (SyntaxError: Reserved word "function" on line 2): 
    app/views/general_ajax/on_page_load.js.coffee:1:in `_app_views_general_ajax_on_page_load_js_coffee___2304196970850216490_70321203283120' 

我認爲CoffeeScript的是,包括它在視圖(這是咖啡,不支持編譯JS),如果我改變on_page_load觀點的延伸

之前編譯到.js.erb然後它工作。 (奇怪的是,我必須重新啓動我的服務器之前,它的工作原理,你知道爲什麼嗎?)

你認爲這是一個問題在咖啡標記或是不好的做法,因此不支持?

作爲一個側面討論,您如何看待我的動態腳本方法?

回答

2

這是因爲_update_some_stuff.js.coffee被解釋並轉換爲Javascript。當它被插入到on_page_load.js.coffee中時,它會產生錯誤,因爲vanilla Javascript代碼在Coffee-Script文件(本例中爲function關鍵字)內不兼容。

+0

是的我同意,這是什麼原因造成的問題。但是,你推薦什麼,而不是渲染「update_some_stuff」'?如何正確使用coffeeScript partials? – Cristian

+0

我不知道。我還沒有需要這個。我已使用respond_to呈現JavaScript。也許從那裏你可以根據一些條件渲染一個文件或另一個文件,並使用Rails partials。 –

+0

我的想法是將這些文件分開,這樣每個文件都有自己的功能,並且可以單獨加載它們,具體取決於它們是否需要(某種延遲加載)。有時需要一次加載更多文件,因此渲染調用在此不起作用。 – Cristian

5

一個解決方案是將原始解析的javascript嵌入到視圖中。

注意後面的蜱蟲(它告訴coffeescript這是原始的javascript)並且使用raw()來撤消呈現的部分的HTML轉義。

` 
<%= raw(render("update_some_stuff")) %> 
` 
+0

謝謝!這不是很性感,但它確實工作:) –