0

我对运行旧的 jQuery 代码片段和 Rails UJS 以及 Turbo 到底需要做什么感到困惑。

DHH 在 6 月份添加了这个 PR,它本应提高兼容性,但它缺乏有关设置应如何工作的详细信息。

我的应用程序中仍然有一堆旧的 jQuery 和 UJS 片段,但我也在尝试迁移到 Turbo。我最初试图完全放弃 UJS,但一次太多了。此时,我正在使用 Webpacker 运行 Rails 6.1.4.1,并且我的 Gemfile 中没有任何 UJS gem。

升级页面说:

“Rails UJS 可以直接从 Rails 框架提供,也可以通过经典的 jquery-ujs 插件提供。”

这是否意味着 UJS 现在已内置到 Rails 中,而不是单独的 gem?或者我应该添加gem 'jquery-rails'到我的 Gemfile 中吗?

我的 package.json 呢?我现在需要回去,yarn add jquery-ujs这里所示?

application.js 呢?我之前在这里导入了@rails/ujs,比如:

import Rails from "@rails/ujs"
Rails.start()

当我添加 Turbo 时,我注释掉了这些行。它们是必要的还是没有的?

关于 jQuery,我拼凑在一起(从其他网站粘贴)一种使用$全局的方法:

var jQuery = require('jquery')
global.$ = global.jQuery = jQuery;
window.$ = window.jQuery = jQuery;

这不再需要了吗?

编辑以包含 package.json 和 application.js 的依赖项部分...

package.json

  "dependencies": {
    "@fortawesome/fontawesome-free": "^5.15.2",
    "@hotwired/turbo-rails": "^7.0.0-rc.5",
    "@rails/request.js": "^0.0.5",
    "@rails/webpacker": "5.4.2",
    "chart.js": "^3.0.2",
    "chartkick": "^4.0.2",
    "cssnext": "^1.8.4",
    "expose-loader": "^2.0.0",
    "flatpickr": "4.6.6",
    "jquery": "^3.6.0",
    "lodash": "^4.17.21",
    "select2": "4.0.13",
    "signature_pad": "^3.0.0-beta.4",
    "slim-select": "1.26.1",
    "stimulus": "^2.0.0",
    "stimulus-flatpickr": "^1.4.0",
    "tippy.js": "^6.3.1",
    "trim-canvas": "^0.1.2"
  }

application.js

// Allow global access to jQuery and $
var jQuery = require('jquery')
global.$ = global.jQuery = jQuery;
window.$ = window.jQuery = jQuery;

// This was uncommented when I used rails/ujs
// import Rails from "@rails/ujs"

import "@hotwired/turbo-rails"

// This was uncommented when I used rails/ujs
// Rails.start()

// select2 menus
require("select2")

// tooltips
import tippy from 'tippy.js'
import 'tippy.js/dist/tippy.css';

// stimulus js
import { Application } from "stimulus"

// Flatpickr date picker
import Flatpickr from "stimulus-flatpickr"

import { definitionsFromContext } from "stimulus/webpack-helpers"

const application = Application.start()
application.register("flatpickr", Flatpickr)
const context = require.context("./controllers", true, /\.js$/)
application.load(definitionsFromContext(context))
4

0 回答 0