【问题标题】:Turbolinks loads Javascript multiple timesTurbolinks 多次加载 Javascript
【发布时间】:2017-01-14 02:05:01
【问题描述】:

我使用的是 Turbolinks 2.5.3,主页底部有一个脚本标签。

<script>
  $(document).ready(function() {
    alert('hello');
  });
</script>

对于网站上的每个页面,我运行以下 JS:

Turbolinks.pagesCached(0);

如果我访问主页,警报会出现一次。如果我按后退按钮,然后按浏览器上的前进按钮,主页将加载,现在出现两个警报。如果我再次重复此过程,将出现三个警报。

这是我的问题:

为什么当我明确告诉 Turbolinks 不要缓存页面时,它会缓存页面。它是否与 Turbolinks 转换文档就绪事件侦听器有关?如何解决这个问题,让它每次只加载一次?

【问题讨论】:

  • 你为什么在每个页面上都使用pagesCached(0)

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


【解决方案1】:

在加载时使用它

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

https://github.com/turbolinks/turbolinks-classic#events

【讨论】:

  • 抱歉,这仍然会导致表单多次加载。
  • 不,同样的结果。警报加载两次。
【解决方案2】:

使用turbolinks:load

<script>
  $(document).on('turbolinks:load',function() {
    alert('hello');
  });
</script>

【讨论】:

  • 很遗憾,此代码根本没有显示警报。
  • 这对于 turbolinks 5 是准确的,但对于 2.5.3 则不准确
【解决方案3】:

试试这样的

<script>
  $(document).ready(function() {
    if (alert('hello')) {
    }
    else {
     alert('hello');
    }
  });
</script>

【讨论】:

  • 这不是一个可行的解决方案,因为alert('hello') 实际上并没有在我的代码中使用。为了简单起见,我添加了它。