Turbolinks 多次加载 Javascript

Posted

技术标签:

【中文标题】Turbolinks 多次加载 Javascript【英文标题】:Turbolinks loads Javascript multiple times 【发布时间】: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) 【参考方案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') 实际上并没有在我的代码中使用。为了简单起见,我添加了它。

以上是关于Turbolinks 多次加载 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

jQuery-turbolinks - link_to 确认:在 Rails 中多次弹出

使用 Turbolinks 完全加载后显示页面

在加载 <script> 标记之前等待 turbolinks 加载

升级 turbolinks 导致 css 停止加载

rails turbolinks 在单页上加载 javascript

在 turbolinks 准备好之前加载脚本? $(...).DataTable 不是函数