Highlight.js和Rails,页面需要刷新 - 再次turbolinks?

时间:2015-07-16 06:41:37

标签: javascript jquery ruby-on-rails

我的问题非常简单:

的application.js

//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require ckeditor-jquery
//= require_tree ./code
//= require turbolinks


hljs.initHighlightingOnLoad();

index.html.erb

<div class="ui items" data-no-turbolink>
  <% @posts.each do |post| %>
    <div class="index_post" data-no-turbolink>
      <%= link_to post.title, post, class: 'ui large header' %>
      <div class="date_created">
        <%= post.created_at.strftime("%B %d, %Y") %>
      </div>
      <div class="content">
        <%= simple_format(post.body) %>
      </div>
    </div>
<% end %>
</div>

Highlight.js和default.css.scss位于assets文件夹中的位置,一切正常,如果我刷新页面。我试图在application.js中注释turbolinks行,一切正常。如何通过保持turbolinks使其工作?

这是我在我创建的几乎每个项目中遇到的问题。解决方案可以是在链接的标记中包含data-no-turbolink,以打开我遇到问题的视图,但它是不依赖于单个链接的主页(以及其他网页)。最后,我更喜欢最佳解决方案而不是黑客。

2 个答案:

答案 0 :(得分:4)

这个也让我感到意外,但是你需要考虑一下highlightSS认为除了TurboLinks之外已经调用它绕过document.ready事件。 @rsb的代码只考虑Turbolinks绕过document.ready事件触发器。所以在RSB的答案中你需要hljs.initHighlighting.called = false

ready = function() {
  hljs.initHighlighting.called = false;
  hljs.initHighlighting();
}

注意:我将通话更改为initHighlighting()而不是initHighlightingOnLoad()

答案 1 :(得分:1)

application.js

中执行此操作
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require ckeditor-jquery
//= require_tree ./code
//= require turbolinks

ready = function(){
  hljs.initHighlightingOnLoad();
}

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

希望有所帮助!