【问题标题】:Re-rendering specific js file with turbolinks enabled启用 turbolinks 重新渲染特定的 js 文件
【发布时间】:2013-05-21 04:36:06
【问题描述】:

我正在使用 Rails 4 并希望使用内置的 Turbolink gem。我对它所做的一切都很满意,只是我希望它在每个页面请求时重新加载其中一个 js 文件。

换句话说,我想要一个特定的 js 文件来忽略 turbolinks,我该怎么做?

【问题讨论】:

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


    【解决方案1】:

    您可以使用 turbolinks 中的 'page:load' 事件将初始化函数连接到它。当 turbolinks 完全重新加载您的新页面时,它将始终被调用。

    function initialize() {
      //js code what you want run always
    }
    
    $(document).ready(initialize);
    $(document).on('page:load', initialize);
    

    如果你经常使用 jQuery,安装在你的 Gemfile 中会很有用

    gem 'jquery-turbolinks'
    

    还有你的 application.js

    //= require jquery
    //= require jquery.turbolinks
    

    Turbolinks 还有两个有用的事件:

    page:fetch //when new page begin to download
    page:change //when the page has changed over
    

    【讨论】:

    • 这里你必须记住的问题是,每次加载时,除了已经加载的脚本之外,它还在加载。因此,如果您在脚本中为 ex 绑定事件,它们将被一遍又一遍地绑定。仍在寻找避免这种情况的最佳解决方案。
    • 我认为,这些问题在最新的 turbolinks 和 jquery-turbolinks 中不再存在......您可以始终向您的 dom 元素添加一个额外的类,它可以作为 semafor 来避免多重边界...$(#yourselector:not(.bounded)).addClass('bounded').on('an event', do_this);
    • 正确,只是想让人们知道。似乎没有被广泛提及的东西。我写了一个快速脚本,它会在加载下一页之前自动取消绑定任何添加的事件。
    猜你喜欢
    • 2016-01-11
    • 2011-08-28
    • 2011-11-05
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    相关资源
    最近更新 更多