0

我正在开发一个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 文件,但它们似乎没有任何效果。

4

2 回答 2

0

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

于 2013-07-18T15:08:07.387 回答
0
$("#sortable").sortable();

如果这确实是您所拥有的一切,app/assets/javascripts/menu_list.js它将在脚本加载后立即运行,这不是您想要的。您希望至少在 DOM 完全加载到页面之后而不是之前运行上述代码。

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

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

<%= javascript_include_tag "application" %>

您将看到 Sprockets 正在加载的每个 Javascript 文件都有一个单独的<script>标签。将拿起你的//= require_tree . 文件app/assets/javascripts/menu_list.js

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

rake assets:clean

您还可以通过向上述包含标签添加选项来强制调试模式<script>每个文件的单独标签):debug

<%= javascript_include_tag "application", debug: true %>
于 2013-07-18T15:14:57.230 回答