Turbolinks,将 javascript 限制为一页

Turbolinks, limit javascript to one page

我正在使用 highlight.js 并应用此代码为博客应用程序中的代码片段初始化语法突出显示。

以下代码在我的 index.html 页面上:

<script>
$(document).on('ready page:load', function() {
  $('pre code').each(function(i, e) {hljs.highlightBlock(e)});
});
</script>

代码片段最初应如下所示:

<pre><code>A
B</code></pre>

应用新样式后变成这样:

<pre><code class=" hljs">A
B</code></pre>

问题是,当我尝试编辑 edit.html 页面上的其中一篇帖子时,在编辑器中我得到的是程式化版本而不是普通版本,这是我不想要的。我希望新样式仅应用于索引页。我怎样才能做到这一点?

我应该提到我已经生成了一个脚手架,其中包含所有包含的视图:索引、新建、编辑等。

我还安装了 jquery-turbolinks gem。

问题是这样的:我加载 index.html 并得到突出显示的代码。我导航到 edit.html 并获得突出显示的代码。我刷新了 edit.html 页面并失去了突出显示(这是应该的)。

----------------------------------------编辑------------------------------------

试过这个但没有用:

在我的 aplication.html.erb 中: <body data-action="<%= action_name %>" data-controller="<%= controller_name %>">

在我的 index.html.erb

<script>
    var data = $('body').data();
    if (data.controller === 'posts' && data.action != 'edit'){
        $(document).on('ready page:load', function() {
            $('pre code').each(function(i, e) {hljs.highlightBlock(e)});
        });
    };
</script>
<body data-action="<%= action_name %>" data-controller="<%= controller_name %>">

然后您可以在脚本中阅读:

$(document).on('page:change', function(){
    var data = $('body').data();
    if (data.controller === 'foo' && data.action === 'bar'){

    };
});