【问题标题】:Rails turbolinks JS files BugRails turbolinks JS 文件 Bug
【发布时间】:2015-02-09 23:15:31
【问题描述】:

我所有的 .js 文件如下所示:

function function_name(){
.....
some code
.....
}
$(document).ready(function_name);
$(document).on('page:load', function_name);

我使用setInterval(some_function, 7000),像$(document).on('click', '.blah-blah', function(){...}) 这样的事件处理程序。不幸的是,如果我通过 turbolinks(使用 turbolinks 会话)对服务器有多个请求,这些东西会多次调用。实际上调用的数量等于服务器请求的数量。 例如,我有 <button id="button"></button> 和 js 事件处理程序,处理程序执行的次数与我在 turbolinks 会话中的请求一样多。好烦)

我希望您了解如何保持 turbolinks 开启并避免在 js 文件中多次调用。谢谢。

【问题讨论】:

    标签: javascript jquery ruby-on-rails turbolinks


    【解决方案1】:

    你有两个选择:

    1. 在执行设置间隔或添加处理程序等操作的代码中,首先检查间隔或处理程序是否已存在,如果已经存在则不要添加另一个。

    2. "page:before-change""page:before-unload" 一样附加到one of the other events from turbolinks,并删除其中的间隔或处理程序。

    【讨论】:

    • 你能解释一下为什么会这样吗?为什么会执行多次?
    • 不专门看你的代码,让我给你一个概述答案:Turbolinks 将页面本身加载到内存中,它基本上将所有常规链接转换为 ajax 样式调用,因此 Rails 只发回正文新页面,然后 turbolinks JS 将该正文加载到现有页面中。这意味着你所有的 JS 都保留在内存中,所以如果你有一个间隔运行,它就会保持运行。然后你的 page:load 函数添加另一个间隔,然后它们都会触发。
    • 非常感谢,这是我想听到的)
    猜你喜欢
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多