【问题标题】:Ruby on rails 4.0 + javascript not loadingRuby on rails 4.0 + javascript 未加载
【发布时间】:2014-04-30 09:26:15
【问题描述】:

我有一个名为“front.js”的javascript文件,我像往常一样使用以下代码从“application.js”加载:

//= require front

在“front.js”中,我有很多功能要在文档准备好时启动,如下所示:

$(document).ready(function() {
  $("#test").click(function(event){
    ...
  });
});

但问题是“front.js”仅在我手动刷新页面时加载(ctrl+r / f5),而不是在我从一个页面移动到另一个页面时加载,因此我的 javascript 代码无法按需要执行。也许这来自 turbolinks,我不知道如何处理这个问题。当我将脚本直接放在 html 文件中时,它可以工作,但绝对不是正确的做法。

谁能帮我解决这个问题?

【问题讨论】:

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


【解决方案1】:

您可以通过三种方式做到这一点。

一个。您可以将 jquery 代码包装在一个函数中,然后在页面加载时调用该函数。如果你的函数准备好了,那么你可以这样做:

$(document).ready(ready);
$(document).on('page:load', ready);

b.你可以使用 jquery 的 live event 或者 "on" event:

$(document).on("click","#test",function(){
 // your code
});

c。您可以使用 jquery-turbolinks gem,它将 Rails Turbolink 事件绑定到 document.ready 事件,这样您就可以以通常的方式编写 jQuery。更多信息请参考here

【讨论】:

    【解决方案2】:

    这是由于 turbolinks,改为这样做

    var ready;
    ready = function() {
      $("#test").click(function(event){
        ...
      });
    };
    $(document).ready(ready);
    $(document).on('page:load', ready);
    

    【讨论】:

      【解决方案3】:

      我在我的项目中使用 Foundation 时遇到了同样的问题,您可以通过在 application.js 文件中不需要 turbolinks 来禁用 turoblinks,它应该可以解决问题。

      【讨论】:

      • 还要确保在 application.html.erb 等位置删除对 turbolinks 的引用。对您的项目进行递归 grep 搜索,以确保您删除了该“功能”的所有痕迹,并且您的 JS 可能会开始正常工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 2015-02-04
      • 1970-01-01
      • 2013-12-22
      相关资源
      最近更新 更多