20

使用 rails3 - 我有一个包含许多任务的项目。我想使用 javascript 为每个任务构建 UI。我想我可以通过为每个任务渲染一个 javascript 部分来在项目显示页面上显示这些任务。我无法通过“tasks/show”查看 tasks/show.js.erb 有什么想法吗?

在项目/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

谢谢

4

6 回答 6

28

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

来自“使用部分”

于 2010-05-03T04:18:38.857 回答
12

你可以试试这个。您可以制作一个 html并用 html标签_show_js.html.erb包围您的 JS 代码,而不是使用 Javacript 部分。<script>

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

和,

<div id="tasks">
<%= render(:partial => "tasks/show_js", :collection => @project.tasks) %> 
</div>
于 2011-07-21T17:07:55.303 回答
7

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

 <script> 
  <%= render(:partial => 'shared/topmenujs', :formats => [:js] ) %>
  </script>
于 2016-02-24T03:20:58.103 回答
5

尝试:

渲染 :partial => "tasks/show.js"

于 2011-01-27T14:58:14.773 回答
3

好吧,我不知道是否是同一个问题,但是我在 rails 3 上经历了类似的事情。例如,我有一个局部视图,app/views/invoices/_select.html.erb并且能够在视图中渲染

<%= 渲染 :partial => "invoices/select" %>

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

渲染:部分=>“发票/选择”

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

于 2010-11-05T17:18:22.377 回答
2

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

为了解决这个问题,您需要创建一个 _show.js.erb 文件,但由于这种方式违背了部分的目的,您也可以将 show.html.erb 文件重命名为 show.erb

但是,这可能是一种不好的做法,要进行没有类型结尾的标准控制器操作(例如 show.erb)

如果我是你,我会做的是将你的部分重命名为 _tasks.erb 而不是 _show.html.erb,然后如果你需要一个任务/show.html.erb,你可以在该视图中渲染 _tasks 部分。

于 2010-10-06T02:16:50.170 回答