Rails 4 - 为什么 turbolinks 导致日期选择器停止工作
Rails 4 - why turbolinks causes datepicker stopping working
我们从 Rails 3.2 升级到 Rails 4.2,升级后 datepicker (jquery ui)
停止工作。 Bootstrap 3 也用于 Rails 3/4。
这是 simple_form
中 datepicker
字段的示例:
<%= f.input :since_date, :label => t('Since'), :as => :string %>
从应用的 application.js
中删除 turbolinks
后,datepicker
再次开始工作。有人可以解释为什么 turbolinks
会导致问题。
我不完全确定,但从实用的角度来看,我总是在我启动的任何 Rails 应用程序中立即禁用 Turbolinks。但如果您需要 turbolinks 提供的功能,请查看 jQuery Turbolinks。
根据 jquery Turbolinks 的作者:"But if you have a large codebase with lots of $(el).bind(...) Turbolinks will surprise you. Most part of your JavaScripts will stop working in usual way. It's because the nodes on which you bind events no longer exist."
Ryan Bates 在 railscast 390 现有 JavaScript 功能问题 中谈到了 turbolinks 问题。
您需要处理 turbo 链接加载事件并销毁并重新初始化任何日期选择器。
// Called when page first loads.
$(function(){
$('.date-picker').datepicker();
});
// Handle turbolinks page load.
$( document ).on('turbolinks:load', function() {
$('.hasDatepicker').datepicker("destroy");
$('.date-picker').datepicker();
});
我们从 Rails 3.2 升级到 Rails 4.2,升级后 datepicker (jquery ui)
停止工作。 Bootstrap 3 也用于 Rails 3/4。
这是 simple_form
中 datepicker
字段的示例:
<%= f.input :since_date, :label => t('Since'), :as => :string %>
从应用的 application.js
中删除 turbolinks
后,datepicker
再次开始工作。有人可以解释为什么 turbolinks
会导致问题。
我不完全确定,但从实用的角度来看,我总是在我启动的任何 Rails 应用程序中立即禁用 Turbolinks。但如果您需要 turbolinks 提供的功能,请查看 jQuery Turbolinks。
根据 jquery Turbolinks 的作者:"But if you have a large codebase with lots of $(el).bind(...) Turbolinks will surprise you. Most part of your JavaScripts will stop working in usual way. It's because the nodes on which you bind events no longer exist."
Ryan Bates 在 railscast 390 现有 JavaScript 功能问题 中谈到了 turbolinks 问题。
您需要处理 turbo 链接加载事件并销毁并重新初始化任何日期选择器。
// Called when page first loads.
$(function(){
$('.date-picker').datepicker();
});
// Handle turbolinks page load.
$( document ).on('turbolinks:load', function() {
$('.hasDatepicker').datepicker("destroy");
$('.date-picker').datepicker();
});