【问题标题】:How to render partial.js in rails 3如何在 Rails 3 中渲染 partial.js
【发布时间】:2010-05-02 22:54:36
【问题描述】:

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

在项目/show.html.erb中

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

tasks/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

谢谢

【问题讨论】:

  • 不确定但试试: "tasks/show.js", :collection => @project.tasks) %>
  • 谢谢,但不幸的是我得到了同样的结果:缺少部分任务/show.js

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


【解决方案1】:

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

来自"Using Partials"

【讨论】:

  • 这对我有用,只要我不使用 " 表示纯文本。通过将 alert("test") 替换为 alert('test') 它开始对我正常工作。
【解决方案2】:

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

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

和,

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

【讨论】:

  • 为了渐进式增强,您应该考虑通过良好的旧 JS 选择器附加您想要的功能 - 一旦基本的纯 HTML 版本工作:)
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    试试:

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

    【讨论】:

    • 如果他这样做,并将文件名更改为_show.js.erb,它会工作
    【解决方案5】:

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

    “发票/选择” %>

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

    render :partial => "invoices/select"

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

    【讨论】:

    • 我遇到了同样的问题。正如迈克尔所建议的那样,我通过复制文件并将文件名中的 html 更改为 js 来使其工作。但这似乎不是一个很好的解决方案。
    【解决方案6】:

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

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

    不过,这可能是一种不好的做法,因为它可以在没有类型结尾的情况下进行标准控制器操作(例如 show.erb)

    如果我是你,我会做的是将你的部分重命名为 _tasks.erb 而不是 _show.html.erb,然后如果你需要一个 tasks/show.html.erb,你可以将 _tasks 部分呈现在那个观点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多