首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用导入映射在Rails 7中安装jQuery?

如何使用导入映射在Rails 7中安装jQuery?
EN

Stack Overflow用户
提问于 2022-05-18 11:59:15
回答 3查看 2K关注 0票数 4

我有一个新的Rails 7应用程序。我目前正在尝试学习Rails 5之后的所有新特性。我想在我的javascript文件中使用以下代码,但到目前为止,我得到了以下错误:Uncaught ReferenceError: $ is not defined

代码语言:javascript
复制
$(document).on("turbo:load", () => {
  console.log("turbo!");
});

这是另外两个相关的文件。如果我需要发其他东西,请告诉我。

importmap.rb

代码语言:javascript
复制
pin "application", preload: true
pin "jquery", to: "https://ga.jspm.io/npm:jquery@3.6.0/dist/jquery.js", preload: true
pin "@hotwired/turbo-rails", to: "turbo.min.js", preload: true
pin "@hotwired/stimulus", to: "stimulus.min.js", preload: true
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js", preload: true
pin "el-transition", to: "https://ga.jspm.io/npm:el-transition@0.0.7/index.js"

pin_all_from "app/javascript/controllers", under: "controllers"

application.js

代码语言:javascript
复制
import "@hotwired/turbo-rails"
import "jquery"

$(document).on("turbo:load", () => {
  console.log("turbo!");
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-05-18 13:40:49

在使用jspm时,必须显式导入jQuery:

代码语言:javascript
复制
// app/javascript/application.js

import jQuery from "jquery";

// NOTE: make jQuery global if needed
window.$ = window.jQuery = jQuery;

console.log($); // ok

另一种方法(IMHO的最佳方式)是切换到jspm以外的CDN:

代码语言:javascript
复制
# config/importmap.rb

# NOTE: pin jquery to jsdelivr instead of jspm
pin "jquery", to: "https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.js"
代码语言:javascript
复制
// app/javascript/application.js

import "jquery";
console.log($); // ok

一切都正常,不需要吊装黑客。

请记住,默认情况下,导入映射是延迟的(每个浏览器?,所以您不能在内联脚本中使用$ (除非向后弯曲),因为jquery是在加载页面之后加载的。

相关:

票数 6
EN

Stack Overflow用户

发布于 2022-05-18 13:37:11

我需要在我的application.js文件中添加几行代码。

代码语言:javascript
复制
import "@hotwired/turbo-rails"
import jquery from "jquery"
window.jQuery = jquery
window.$ = jquery
票数 1
EN

Stack Overflow用户

发布于 2022-08-11 18:25:46

做其他答案说的会有效,但当你插入一个新的包裹时,它就会停止工作。

原因是所谓的javascript挂起的工作方式,这意味着它将重新排序您必须以块方式重新组织导入的代码。这将刹车jQuery窗口分配。

为了避免这种情况,提取

代码语言:javascript
复制
import jquery from "jquery"
window.jQuery = jquery
window.$ = jquery

在另一个文件中,并在单个导入时调用它。

就我而言,我有:

application.js

代码语言:javascript
复制
import "./src/jquery"

$(function(){
  console.log("Hey!")
})

以及上面代码的src/jquery.js。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72288802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档