【问题标题】:Turbolinks: How to manually end a javascript session in Rails?Turbolinks:如何在 Rails 中手动结束 javascript 会话?
【发布时间】:2014-02-25 10:42:33
【问题描述】:

在我的 Rails 应用程序中,我在一页中有一个 javascript 计时器。使用 turbolink 时,Timer 对象将在页面之间持续存在。

因此,当用户在timer.html.erb 中启动计时器并转到另一个页面并更改回来时,计时器仍在运行(持续),而不是重新启动。

我想向您展示我的示例。但是放在哪里呢? JS小提琴? Heroku?

注意: 我试过了,如果我关闭涡轮链接,一切都会好起来的。

【问题讨论】:

    标签: javascript ruby-on-rails turbolinks


    【解决方案1】:

    每次页面加载时,我都会使用他们的events 重新加载计时器,而不是删除 Turbolink:

    #app/assets/javascripts/application.js
    var timer = function() {
        //timer init
    };
    
    $(document).ready(timer);
    $(document).on('page:load', timer);
    

    【讨论】:

    • 但是通过调用 timer 两次,我们将启动时钟两次。如何解决?
    • 你测试了吗? document.ready 在您加载计时器和page:load 刷新时启动计时器。如果$(document).ready 调用了两次,你可以摆脱它
    • 当然 - 您可以在 timer 函数中使用条件。 page:load 只是 turbolinks event,这意味着您应该将任何逻辑放入您要调用的函数中
    • 那我就放一个
      ,用js检查cutsomFunction是否存在。这是一个好习惯吗?或者什么是好的做法?
    • 是的,这就是我要开始做的——你也许可以参考位置或其他东西,但最重要的是你需要某种识别元素(在 URL 或 HTML 中)
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签