【问题标题】:Rails 3.2.13 Javascript Asset PipelineRails 3.2.13 Javascript 资产管道
【发布时间】:2013-07-17 13:42:23
【问题描述】:

我正在开发一个Rails 3.2.13 应用程序,遇到以下问题:

我在 app/assets/javascripts/ 目录中编写的 Javascript 文件似乎没有运行。

我在 app/assets/javascripts/ 目录中名为 menu_list.js 的文件中有 JS 代码,但它没有任何作用。而当我将相同的代码放在标签中的视图页面上时,它可以工作。

<script>$("#sortable").sortable();</script>

这是我的 application.js 文件:

//= require jquery
//= require jquery_ujs
//= require jquery.purr
//= require jquery-ui
//= require best_in_place
//= require bootstrap
//= require bootstrap-switch
//= require_tree .

我的 menu_list.js 文件:

$(function() {
  $("#sortable").sortable();
});

这对我来说没有意义,因为我认为 //= require_tree . 会包含目录中的所有 javascript 文件。我也尝试了其他 javascript 文件,但它们似乎没有任何效果。

【问题讨论】:

  • 您是否看到在生成的 html 标记中创建了 menu_list.js 的脚本标签?我的理解是 = require 在清单中包含 javascript,但不一定在页面上包含它。
  • 我应该寻找类似 的东西吗?在这种情况下,不,它不在 html 标记中
  • 你的 javascript 中有 $(document).ready 吗?
  • @John Yeung - 是的。您是否使用 javascript_include_tag 在您的应用中包含该文件?
  • 是的,我在javascript中的代码如更新后的问题所示。

标签: javascript jquery ruby-on-rails ruby asset-pipeline


【解决方案1】:
$("#sortable").sortable();

如果这真的是您在app/assets/javascripts/menu_list.js 中的全部内容,它将在脚本加载后立即运行,这不是您想要的。您希望至少在 DOM 完全加载到页面之后而不是之前运行上述代码。

$(function() {
  $("#sortable").sortable();
});

如果您运行的环境是:development,并且您的布局中正确包含以下内容

<%= javascript_include_tag "application" %>

对于 Sprockets 正在加载的每个 Javascript 文件,您将看到一个单独的 &lt;script&gt; 标记。 //= require_tree . 获取您的 app/assets/javascripts/menu_list.js 文件。

我还建议您通过在 shell 中运行以下命令来确保您没有任何预编译版本的资产

rake assets:clean

您还可以通过在上述包含标签中添加:debug 选项来强制调试模式(每个文件的单独&lt;script&gt; 标签)

<%= javascript_include_tag "application", debug: true %>

【讨论】:

  • 我尝试了以上所有方法,但没有运气...当我尝试手动包含 javascript 时,标记 生成了,但是没有效果。
  • 您展示的包含镜头毫无意义。此外,像/javascripts/menu_list.js 这样的路径毫无意义。路径应该是/assets/menu_list.js
  • 抱歉,这是我拼命想让它发挥作用的尝试。至于你评论的第二部分,javascripts不是位于'/assets/javascripts/'吗?
  • 当资产由资产管道提供服务时,URL 为 /assets/...;没有创建 assets/javascripts/assets/stylesheets 文件夹。例如,请参阅我正在开发的 Rails 应用之一中的 this screenshot
  • 嗨@Deefour,我又花了一天时间试图找出问题所在。但我似乎无法理解为什么我的 layouts/application.html.erb 显示这个: ,而不是你的截图。为什么会发生这种情况有哪些可能性?如果您能指出我的工作方向,那就太好了。谢谢!
【解决方案2】:

最常见的原因是在默认布局上调用javascript_include_tag,然后您创建另一个布局,忘记在那里添加包含,然后在您使用这个新布局的控制器中没有任何效果。

【讨论】:

  • 我只有一个布局文件——application.html.erb。你能详细说明一下吗?
  • 这很简单。您在这个 application.js 文件中加载了所有依赖项,但是 Rails 不会自动为您加载这个 application.js 文件。通常,它会显式加载到您的布局中。如果你创建一个新的布局,你也必须从那里加载它才能拥有你所有的 js。在您的情况下,如果您只有一个布局,请检查您是否从该布局加载它。
  • 不是 已经这样做了吗?
  • 是的,它就是这么做的。
猜你喜欢
  • 2018-09-01
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
相关资源
最近更新 更多