Rails:正文内容更改之前触发了turbolinks:load事件

时间:2018-08-28 13:00:44

标签: ruby-on-rails turbolinks

我正在使用TurboLinks 5.2.0的Rails 5.1.6应用程序上构建代码博客。

我想做一件非常简单的事情,就是在加载内容后突出显示代码(使用js插件),因此我将其添加到页面中:

find_one

在新负载下效果很好。但是,当您在另一个页面中并单击链接转到该页面时,会在内容更新之前触发coffee: $(document).on "turbolinks:load", -> Highlighter.init() 事件,因此突出显示不起作用。

您知道发生了什么或如何解决此问题?

编辑: 我知道在内容更改之前会触发turbolinks:load,因为我尝试添加turbolinks:load

debugger

编辑2: 这是简单的coffee: $(document).on "turbolinks:load", -> debugger # => This is called before new content is rendered Highlighter.init()

Highlighter.init()

1 个答案:

答案 0 :(得分:1)

问题是hljs.initHighlightingOnLoad() sets up the plugin to work on only DOMContentLoaded or load。这些事件仅在初始页面加载时被调用,因此在此之后,它们将不再被调用。

这是相关事件的顺序:

  1. DOMContentLoaded
  2. turbolinks:load(您的代码设置了要在load上调用的荧光笔)
  3. load(用于初始化突出显示)
  4. 导航到另一个页面
  5. turbolinks:load(您的代码设置了要在load上调用的荧光笔)
  6. 就是这样!在整个页面加载之前,不会再次触发load

要解决此问题,您需要按照Custom Initialization的说明进行操作,并使其适用于Turbolinks:

$(document).on('turbolinks:load', function() {
  $('pre code').each(function(i, block) {
    hljs.highlightBlock(block);
  });
});

我建议您将其包含在您的主应用程序JavaScript文件中。在<body>的内联脚本标签中添加事件处理程序通常会导致问题,除非将其正确删除。