使用Turbolinks 5和Rails 5在页面之间重新加载资产

时间:2018-11-16 09:51:20

标签: ruby-on-rails turbolinks

在生产环境中,我注意到Turbolinks不在页面之间缓存资产。当我进入应用程序的第一页时,我的javascript包和CSS一样被加载。然后,当我进入另一个带有链接的页面时,可以在chrome devtools的“网络”标签中看到它们已重新加载(HTTP代码200)。

application.html.erb

<html>
<head>
    <title>My title</title>
    <meta name="description" content="My description">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="robots" content="index, follow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>

    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <%= csrf_meta_tags %>
    <%= action_cable_meta_tag %>
</head>
<body class="<%= body_user_class %> <%= controller.controller_name %>">
  // Stuff
</body>
</html>

application.js

//= require turbolinks
//= require jquery
//= require jquery.slick
//= require jquery-ui/sortable
//= require rails-ujs
//= require_tree ./components

第一页和第二页之间的资产指纹保持不变,因此我认为问题不在于此。

我可以理解为什么要重新加载我的引导程序资源,因为它是不使用Rails的经典资源。但是为什么我的应用程序的js和CSS重新加载了?

1 个答案:

答案 0 :(得分:0)

在应用程序JavaScript捆绑包中,您具有以下内容:

public void onRecyclerClick(int position, Object object) {
    ViewHolder h = recyclerView.findViewHolderForAdapterPosition(adapterPosition);
    h.modifyAlpha(alpha);
    recyclerView.notifyUpdate(position, object);
}

这将取消默认的Turbolinks行为。如果您删除此事件侦听器,它将可以按预期工作。