2010-05-02 114 views
18

使用rails3 - 我有一個包含許多任務的項目。我想使用JavaScript爲每個任務構建UI。我想我可以在項目展示頁面上顯示這些任務,爲每個呈現一個javascript部分。我無法獲得'tasks/show'來查看tasks/show.js.erb是否有任何想法?如何在rails中渲染partial.js 3

在項目/ show.html.erb

<div id="tasks"> 
<%= render(:partial => "tasks/show", :collection => @project.tasks) %> 
</div> 

任務/ show.js.erb

$("tasks").append(new TaskWidget(task.id)) 

我得到的錯誤

ActionView::MissingTemplate in Projects#show 

Missing partial tasks/show with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths .... around line #13 

感謝

+0

不知道,但嘗試:<%=渲染(:部分=>「任務/ show.js「,:collection => @project.tasks)%> – fig 2010-05-02 23:07:24

+0

謝謝,但不幸的是我得到了同樣的結果:缺少部分任務/show.js – 2010-05-02 23:15:43

回答

26

不該它在文件中?

"Using Partials"

+0

只要我沒有使用」for plain文本。通過用al代替警報(「測試」) ert('test')它開始爲我正確工作。 – Philip 2014-06-10 16:23:54

2

的問題是,在Rails 3中的從.js文件渲染只會查找文件show.js.erb或show.erb形式

要解決這個問題,你要麼需要創建一個_show.js.erb文件,但是由於這種方式不符合partials的用途,所以可以將show.html.erb文件重命名爲show.erb

儘管如此,這可能是不好的做法一個沒有類型結尾的標準控制器動作(例如show.erb)

我會做什麼,如果我是你是重命名你的部分類似_tasks.erb而不是_show.html.erb,然後如果你需要一個tasks/show.html.erb,你可以在該視圖中渲染_tasks部分。

3

好吧,我不知道,如果是同一個問題,但我通過與軌道3類似的事情,我在app/views/invoices/_select.html.erb有例如局部視圖去了,我能夠在一個視圖渲染

<%=渲染:局部=> 「發票/選擇」 %>

與控制器的任何問題,如果我把

渲染:部分=>「發票/選擇」

我能打開瀏覽器的動作,當我嘗試調用從一個Ajax調用的動作出現問題,然後我得到了ActionView::MissingTemplate錯誤。我發現要解決的唯一方法是將視圖重命名爲_select.rhtml,然後每件事情都可以正常工作。

+0

我遇到同樣的問題。正如邁克爾所建議的那樣,我通過複製文件並將html更改爲文件名中的js來實現它。但這似乎不是一個很好的解決方案。 – 2011-05-31 04:39:19

5

嘗試:

渲染:部分=> 「任務/ show.js」

+0

如果他這樣做,並將文件名更改爲_show.js.erb,它將工作 – bonhoffer 2011-07-02 11:14:32

10

你可以試試這個。您可以使用html 來代替具有Java腳本的部分,並使用html <script>標記環繞您的JS代碼。

<script type='text/javascript'> 
$("tasks").append(new TaskWidget(task.id)) 
</script> 

,並

<div id="tasks"> 
<%= render(:partial => "tasks/show_js", :collection => @project.tasks) %> 
</div> 
+0

爲了**漸進式增強**,您應該考慮通過良好的舊JS選擇器附加您所需的功能 - 一旦基本的僅限HTML版本正在工作:) – user569825 2013-03-11 05:26:34

4

爲了使它工作,我需要添加格式:

<script> 
    <%= render(:partial => 'shared/topmenujs', :formats => [:js]) %> 
    </script>