【问题标题】:How to disable TurboLinks in Rails 6?如何在 Rails 6 中禁用 TurboLinks?
【发布时间】:2020-04-05 21:35:09
【问题描述】:

所以我遇到了这个问题,我的服务器确实从客户端的请求中检索了正确的数据,并将这些数据发送到浏览器,在那里我可以清楚地看到它对浏览器可用(CTRL+SHIFT+C > 网络 >我的请求)。但是,浏览器不会刷新。所以我现在看到的是前一页的数据。经过一番搜索,我确定它是由 TurboLinks 引起的,然后我尝试将其禁用为完成 herehere。然而浏览器仍然不会刷新并显示新获取的数据。我做的最后一件事是我的项目目录中的grep -r turbolink *,它给了我以下信息:

app/views/layouts/_dashboard_menu_certified.html.erb:          <%= submit_tag("Apply", {'data-turbolinks': false}) %>
log/development.log:    21:     <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
node_modules/@rails/webpacker/README.md:<%= javascript_packs_with_chunks_tag 'calendar', 'map', 'data-turbolinks-track': 'reload' %>
node_modules/@rails/webpacker/README.md:<script src="/packs/vendor-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
node_modules/@rails/webpacker/README.md:<script src="/packs/calendar~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
node_modules/@rails/webpacker/README.md:<script src="/packs/calendar-1016838bab065ae1e314.js" data-turbolinks-track="reload"></script>
node_modules/@rails/webpacker/README.md:<script src="/packs/map~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
node_modules/@rails/webpacker/README.md:<script src="/packs/map-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
node_modules/@rails/webpacker/CHANGELOG.md:<%= stylesheet_packs_with_chunks_tag 'calendar', 'map', 'data-turbolinks-track': 'reload' %>
node_modules/@rails/webpacker/CHANGELOG.md:<%= javascript_packs_with_chunks_tag 'calendar', 'map', 'data-turbolinks-track': 'reload' %>
node_modules/@rails/webpacker/CHANGELOG.md:<script src="/packs/vendor-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
node_modules/@rails/webpacker/CHANGELOG.md:<script src="/packs/calendar~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
node_modules/@rails/webpacker/CHANGELOG.md:<script src="/packs/calendar-1016838bab065ae1e314.js" data-turbolinks-track="reload"></script>
node_modules/@rails/webpacker/CHANGELOG.md:<script src="/packs/map~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
node_modules/@rails/webpacker/CHANGELOG.md:<script src="/packs/map-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>

有什么我错过的吗? 干杯。

编辑:

<div class="col-sm-6 card">
      <% @res.each do |tool, histories| %>
        <div class="chart">
          <div class="card-header">
            <div class="nav nav-pills card-header-pills">
              <%= tool %>
            </div>
          </div>
          <div class="card-body">
            <div id="<%= tool %>" class=""></div>
            <script>
              new Morris.Line({
              element: "<%= tool %>",
              data: [
                <% histories.each do |history| %>
                  { date: '<%= history.date %>', value: <%= history.uptodate %>, value2: <%= history.outdated %>, value3: <%= history.error %>},
                <% end %>
              ],
              xkey: 'date',
              ykeys: ['value', 'value2', 'value3'],
              labels: ['UpToDate', 'OutDated', 'Error']
              })
            </script>
          </div>
        </div>
      <% end %>
</div>

【问题讨论】:

  • 请解释一下:您是否单击链接开始执行检索新数据的操作?它是一些javascript代码吗?您的控制器代码看起来如何?你在渲染什么(完整的页面视图,部分视图,你如何更新屏幕的一部分?),你使用的是哪个版本的 rails?
  • 我有这个&lt;%= form_with(url: "my_controller", method: "get") do %&gt;&lt;%= submit_tag("Apply", {'data-turbolinks': false}) %&gt;。所以 submit_tag 是触发查询的那个,因此如果来自表单的查询无效,控制器要么用相应的数据填充数组,要么渲染模板。我正在渲染的是一个部分页面,应该显示新获取的数据。正如问题所说,我正在运行rails 6。
  • 所以如果数据有效,它会填充一个数组,你如何渲染/返回这个?它仍然应该呈现一个视图以返回数据。你能告诉我们那个观点吗?您是否使用某种 javascript 框架来呈现数组/列表客户端?
  • 我以与上一页相同的方式呈现它,并使用之前的数据。是的,我正在使用 Morris.js 从数据中创建图表。
  • 对,你这么说好像我知道你说的“上一页有上一个数据”是什么意思。那是另一种形式吗?另一个表格的另一个页面?您是否有另一个带有form_with 的页面有效?然后寻找差异? form_with默认为remote,可能需要添加local: true选项?

标签: javascript ruby-on-rails turbolinks disable


【解决方案1】:
  1. Gemfile 中删除gem 'turbolinks', '~&gt; 5'
  2. app/assets/javascript/application.js 中删除//= require turbolinks
  3. app/views/layouts/application.html.erb 中删除, 'data-turbolinks-track': 'reload' (x2)
  4. 运行yarn remove turbolinks
  5. 运行rails tmp:cache:clear

第 4 步是与 Rails 5 的主要区别。

【讨论】:

  • 或者使用 webpacker,在 app/javascript/packs/application.js 中注释掉 require("turbolinks").start()
  • 提醒您之后运行bundle install,以便更新任何Gemfile.lock 或类似内容
猜你喜欢
  • 2016-12-03
  • 2014-04-15
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 2022-08-12
相关资源
最近更新 更多