2012-03-04 90 views
1

我有一個show動作,想要在完成加載後調用一個函數。該函數依賴於正在加載的jQuery以及application.js的其餘部分。Rails 3.2:在show動作中運行CoffeeScript

我嘗試創建show.js.coffee,這個在它:

SomeClass.doSomething '<%= @thing.description %>' 

...但show.js.coffee從未加載,因此永遠不會執行。我該怎麼做呢?

+0

show.js.coffee文件在哪裏?在你的應用/視圖或應用/資產?你有沒有嘗試將它添加到application.js? – John 2012-03-04 07:48:20

+0

我希望它在app/views/thing/show.js.coffee中。我不知道這是否正確,但這是其他咖啡觀點的意見,所以它也應該在那裏。 – 2012-03-04 08:36:39

+0

澄清,@John(糾正我,如果我是錯誤的蒂姆),這是一個視圖模板使用Rails的內置JS渲染的動作。我不確定'app/assets'之外的'.coffee'文件是否自動獲取ERB;你有沒有嘗試在文件擴展名中加入'.erb'?你有任何的JavaScript錯誤?如果您使用'<%Rails.logger.info'測試'%>'或類似的任何控制檯輸出? – 2012-03-04 09:07:54

回答

0

也許我錯過了一些東西,但它聽起來像有兩件事:1)需要一些觸發執行的DOM事件,以及2)ERB和控制器上下文(<%= @thing.something %>)僅在視圖中存在和處理。在這種情況下,聽起來像document.ready是事件。因此,假如你在CoffeeScript中定義SomeClass其中某個地方,這已經被加載,你show.js.coffee文件(這是一個JavaScript/DOM上下文中執行)可能是這樣的

$ -> 
    SomeClass.doSomething $("#thing_something").val() 

這有可能是你可以得到再培訓局部分通過在show.html.erb視圖

<script type="text/coffeescript"> 
    $ -> 
    SomeClass.doSomething '<%= @thing.description %>' 
</script> 

不知道這一點加上這樣的事情...

5

版本的coffee-rails寶石的3.2增加了對JavaScript的支持請求在app/views目錄中:

此外還支持使用CoffeeScript響應JavaScript請求(使用.js.coffee視圖)。

注:gem coffee-railsgroup :assets

只要撥打things#show就像正常(remote: true),並確保有一個名爲app/views/things/show.js.coffee的文件。

+0

我正在使用rails 3.2.12,並且沒有必要將寶石咖啡欄移動到資產組 – Artur79 2013-02-27 10:00:52

+0

似乎很奇怪,將js/coffee腳本放在views文件夾下。 – 2014-10-05 18:38:53