【问题标题】:Javascript doesn't run without page refresh using turbolinks in Rails 5在 Rails 5 中使用 turbolinks 不刷新页面,Javascript 无法运行
【发布时间】:2017-04-26 11:53:11
【问题描述】:

我在这里看到了几篇关于这个问题的文章以及博客文章。 到目前为止,他们都没有帮助过我,例如这个: Same rails and turbolink version

这是一个不刷新页面就无法加载的js示例:

document.addEventListener('turbolinks:load', function() {
    document.getElementById(id[0]).oninput=function () {
        validate(id[0]);
    }
});

没有 Turbolinks 的 Javascript 运行良好,删除 Turbolinks 对我来说不是一个解决方案。

注意:如果我需要来自 application.html.erb 的特定 JS 文件,它确实有效,但是它会运行网站上所有页面上的每个文件,并且 JS 必须是特定于页面的。

【问题讨论】:

  • 你能通过console.log输出任何东西到控制台吗?从您的 turbolinks:load 回调函数中删除所有内容并添加 console.log('test');看看这是否有效。
  • @l.varga document.addEventListener('turbolinks:load', function() { document.getElementById(id[0]).oninput=console.log('test'); });像这样?没用,没有
  • 不像这样 - 只是控制台日志用于调试并查明问题的实际来源,无论是 turbolinks:load 没有被侦听器拾取(其中,在我的意见,不应该是问题),或者你的函数的其余部分(更高的机会): document.addEventListener('turbolinks:load', function() { console.log('test'); });跨度>
  • 现在按照你的建议做了,只有在刷新页面后仍然有效。
  • 您必须从 application.html.erb 中获取哪个文件才能使其工作?它是一个turbolinks文件吗?因为现在似乎 turbolinks:load 没有被触发,我能想到的唯一解释是 turbolinks 没有被执行。

标签: javascript ruby-on-rails turbolinks


【解决方案1】:

您应该将这个用于 turbolinks。

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

但这很糟糕,因为在某些页面上您想要使用 turbolinks,而在其他页面上您不想要。很快,您将仅通过准备好文档(因为您不能等待页面加载)和其他通过 page:load 来初始化脚本。所以最好只是防止这种“意外行为”:

= link_to "Page", some_path(@page), data: { turbolinks: 'false' }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多