2010-05-02 88 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>