如何在rails 3中渲染partial.js

时间:2010-05-02 22:54:36

标签: javascript ruby-on-rails partial ruby-on-rails-3

使用rails3 - 我有一个包含许多任务的项目。我想使用javascript为每个任务构建UI。我想我可以在项目展示页面上显示这些任务,方法是为每个任务渲染一个javascript。我无法获得'tasks / show'来查看任务/ show.js.erb任何想法?

在projects / 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

由于

6 个答案:

答案 0 :(得分:26)

不应该在_show.js.erb文件中吗?

来自"Using Partials"

答案 1 :(得分:10)

你可以试试这个。您可以使用html _show_js.html.erb标记来创建一个html <script>,而不是使用Javascript部分。

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

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

答案 2 :(得分:5)

尝试:

render:partial =&gt; “任务/ show.js”

答案 3 :(得分:4)

为了使其工作,我需要添加格式:

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

答案 4 :(得分:3)

嗯,我不知道是否是同一个问题,但是我对rails 3进行了类似的操作。我在app/views/invoices/_select.html.erb中有一个局部视图,我能够在视图中呈现< / p>

  

&lt;%= render:partial =&gt;   “发票/选择”%&gt;

没有任何问题,如果在控制器中我放置

  

render:partial =&gt; “发票/选择”

我能够在浏览器中打开操作,当我尝试从ajax调用调用操作时出现问题,然后我收到ActionView::MissingTemplate错误。我发现解决的唯一方法是将视图重命名为_select.rhtml,然后每件事都运行正常。

答案 5 :(得分:2)

问题是在Rails 3中,.js文件中的渲染只会查找show.js.erb或show.erb形式的文件

要解决这个问题,您需要创建一个_show.js.erb文件,但由于这种方法会破坏partials的目的,您可以将show.html.erb文件重命名为show.erb < / p>

但是,这可能是一种不好的做法,即在没有类型结束的情况下制作标准控制器动作(例如show.erb)

如果我是你,我会做的是将你的部分内容重命名为_tasks.erb而不是_show.html.erb,然后如果你需要一个任务/ show.html.erb你可以只将_tasks部分渲染到内部那个观点。