我正在使用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()
答案 0 :(得分:1)
问题是hljs.initHighlightingOnLoad()
sets up the plugin to work on only DOMContentLoaded
or load
。这些事件仅在初始页面加载时被调用,因此在此之后,它们将不再被调用。
这是相关事件的顺序:
DOMContentLoaded
turbolinks:load
(您的代码设置了要在load
上调用的荧光笔)load
(用于初始化突出显示)turbolinks:load
(您的代码设置了要在load
上调用的荧光笔)load
要解决此问题,您需要按照Custom Initialization的说明进行操作,并使其适用于Turbolinks:
$(document).on('turbolinks:load', function() {
$('pre code').each(function(i, block) {
hljs.highlightBlock(block);
});
});
我建议您将其包含在您的主应用程序JavaScript文件中。在<body>
的内联脚本标签中添加事件处理程序通常会导致问题,除非将其正确删除。