如何使用 Rails' Turbolinks 和 Wistia's Fresh Url 修复第一页
How to fix first page with Rails' Turbolinks and Wistia's Fresh Url
使用 Wistia 的 Fresh Url plugin 时,Turbolinks 在第一页上不起作用。例如,如果您离开一个页面并单击浏览器中的后退按钮,url 会发生变化,但页面实际上根本不会发生变化。但是,一旦您离开两个页面,Turbolinks 就会再次开始工作。
FreshUrl使用window.history.replaceState()
更新url完成后,需要设置turbolinks: true
因此,您必须将其添加到 Fresh Url 的 FreshUrl.prototype.allReadyCallback()
中,才能成为...
FreshUrl.prototype.allReadyCallback = function() {
return window.history.replaceState({ turbolinks: true }, "", FreshUrl.cleanUrl());
};
Turbolinks 目前不能很好地与 Jquery 和异步 javascript 配合使用,但针对 Rails 5 的更改看起来很有希望。
目前我只建议在单击指向使用该插件的页面的 link 时禁用 turbolinks。您可以通过向 link_to
辅助方法添加 data-no-turbolink
属性 来实现,如下所示:
<%= link_to some_path, 'data-no-turbolink' => false do %>
click_me_to_go_to_some_path
<% end %>
使用 Wistia 的 Fresh Url plugin 时,Turbolinks 在第一页上不起作用。例如,如果您离开一个页面并单击浏览器中的后退按钮,url 会发生变化,但页面实际上根本不会发生变化。但是,一旦您离开两个页面,Turbolinks 就会再次开始工作。
FreshUrl使用window.history.replaceState()
更新url完成后,需要设置turbolinks: true
因此,您必须将其添加到 Fresh Url 的 FreshUrl.prototype.allReadyCallback()
中,才能成为...
FreshUrl.prototype.allReadyCallback = function() {
return window.history.replaceState({ turbolinks: true }, "", FreshUrl.cleanUrl());
};
Turbolinks 目前不能很好地与 Jquery 和异步 javascript 配合使用,但针对 Rails 5 的更改看起来很有希望。
目前我只建议在单击指向使用该插件的页面的 link 时禁用 turbolinks。您可以通过向 link_to
辅助方法添加 data-no-turbolink
属性 来实现,如下所示:
<%= link_to some_path, 'data-no-turbolink' => false do %>
click_me_to_go_to_some_path
<% end %>