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_formdatepicker 字段的示例:

<%= 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();
});