【问题标题】:Ruby on Rails - Include javascript files from view folderRuby on Rails - 包含视图文件夹中的 javascript 文件
【发布时间】:2014-03-25 15:17:51
【问题描述】:

我的问题如下:

我想在 js.erb 文件中使用 "xx"%> - 所以我不能把它放在我的资产文件夹中,因为渲染在资产文件中不起作用。

我已经尝试将它命名为 index.js.erb 以让 rails 自动包含它(它位于视图文件夹中,见下文)但我猜它没有包含在内,因为我删除了我的管理员中的 require_tree 行.js(这是我的管理命名空间的“application.js”)。我不能简单地使用 require 树,因为我不希望包含 assets/javascripts/admin 中的每个 js 文件。

我的 js 文件在这里:

views/admin/benefits/index.js.erb

我想在以下视图中使用它:

views/admin/benefits/index.html.erb

我在这里是否过于复杂了?如果不是,我将如何将其包含在我的视图中? 如果重要的话:我使用 rails 4。

【问题讨论】:

  • 你解决了吗?我有同样的问题。我正在尝试使用 render 并将 .js.erb 文件移动到我的 Views 文件夹中。但现在看来该文件根本不包含在资产管道中。

标签: javascript ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

将其移至资产并将可选的yield 添加到布局文件的head

在你的布局文件中

<% if content_for?(:javascripts) %>
  yield(:javascripts)
<% end %>

在你看来

<% content_for :javascripts do %>
  <%= javascript_include_tag 'benefits/index' %>
<% end %>

我想你误解了这个文件的用途。 js.erb 文件允许您在 JavaScript 文件中使用 Ruby。您实际上无法渲染此文件。您可以查看here 以更好地了解使用它的原因。

【讨论】:

  • 我更新了我的答案以解释 js.erb 文件的用途。
  • 我不想渲染js文件。我想在 js 调用中渲染一个部分,就这么简单。我可以将整个 js 代码直接放在我的视图中,它会工作,但由于这种风格不好,我希望它在外部 js 文件中。
  • 只要让 js 函数从 js 中返回 HTML 并插入到 DOM 中。
【解决方案2】:

js.erb 文件与respond_to 块一起使用,允许控制器响应您的 Ajax 请求。

def create
  respond_to do |format|
    ...
    format.js
    ...
  end
end

然后,您将拥有一个相应的 app/views/users/create.js.erb 视图文件,该文件生成将在客户端发送和执行的实际 JavaScript 代码。

$("<%= escape_javascript(render @user) %>").appendTo("#users");

更多信息here

例如,您可以在assets/javascript/admin/benefits.js 中定义javascript 代码。在application.js 中仅包含此文件,例如:

//= require admin/benefits

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多