让 Jquery 和 Bootstrap 与 Rails 6 配合使用

2023-11-21

我是 Rails 新手,正在努力让 Jquery 和 Bootstrap 与 Rails 6 配合使用。我认为这与将应用程序从 Rails 5 切换到 Rails 6 以及使用 webpacker 加载 Jquery 而不是将其作为 gem 加载有关。我已经阅读了相关说明,但它似乎仍然无法正常工作。有人帮助我解决了一个更具体的问题,并让我将其粘贴到视图中,然后似乎可以正常工作:

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>

然而,这感觉像是一种解决方法,我希望 Jquery 在所有视图中可用。以下是 /javascript/packs/application.js 的副本:

require("jquery")
require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
require("bootstrap/dist/js/bootstrap")

import '../stylesheets/application'
import './bootstrap_custom.js'


//= require jquery3
//= require popper
//= require bootstrap-sprockets

和/config/webpack/environment.js:

const { environment } = require('@rails/webpacker')

const webpack = require('webpack')
environment.plugins.prepend('Provide',
  new webpack.ProvidePlugin({
    $: 'jquery/src/jquery',
    jQuery: 'jquery/src/jquery'
  })
)

module.exports = environment

我不明白之间的区别Require("...") and //= require ...?是个//=应转换为的遗留符号Require("...")?

我也需要两者吗require("jquery") and //= require jquery3?我想不会。如果是的话我应该删除哪一个?

在 /apps/views/layouts/Application.html.erb 中,标题中包含以下内容:

<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>

我为此苦苦挣扎了好几天,希望我的经验能帮到你:)

首先,您将加载 jQuery 和 Bootstrap 作为 webpack 模块,因此您不需要任何这些:

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>

相反,您想使用安装模块yarn根据您的提示:

$ yarn add jquery bootstrap

之后,您应该将 jQuery 导入到您的项目中。最安全的方法是编辑 /config/webpack/environment.js,就像您所做的那样:

...
environment.plugins.append('Provide',
  new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery'
  })
...

现在,由于您将 jQuery 作为 webpack 全局插件导入(即在所有视图中可用,甚至从其他模块中可用),那么您应该not再次将其导入到您的app/javascript/packs/application.js,因为这是导致意外行为的已知原因。但是,您确实希望在该文件中导入 Bootstrap。所以它应该看起来像这样:

# app/javascript/packs/application.js

import 'bootstrap';
import '../stylesheets/application'

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")

请注意,我正在使用import 'module'语法,优于旧的语法require("")句法。而你绝对don't想要使用其中任何一个:

//= require jquery3
//= require popper
//= require bootstrap-sprockets

它们是 Sprockets(资产管道)指令,在 Webpack 领域没有用处。

所以,现在您已经将 jQuery 和 Bootstrap js 导入到您的项目中,但您仍然缺少 Bootstrap 样式表。为了导入它,只需将其包含在您的application.scss(我假设你正在使用它,因为你正在使用它导入它import '../stylesheets/application'):

# application.scss

@import "~bootstrap/scss/bootstrap";

现在,jQuery 和 Bootstrap 已经导入到您的项目中了。希望能帮助到你!如果你是 Webpack 的新手(就像我一样),在完全使用它之前你会遇到很多障碍,因为与资产管道有很多差异。经过几天(如果不是几周)的研究,我已经成功解决了其中的大多数问题,因此请随意查看我的问题历史记录,看看是否找到一些有用的答案。

附加信息:

  1. 您没有指定它,但如果您要使用 Bootstrap 的所有 js 函数,您的项目中还需要 Popper.js。为了安装只需运行$ yarn add popper.js在命令行中,编辑 /config/webpack/environment.js ,使其看起来像这样:
environment.plugins.append('Provide',
  new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery',
    Popper: ['popper.js', 'default']
  })
)
  1. 最后,我尝试以最简洁的方式回答您的问题,但如果您仍然遇到困难,您可能需要查看更多分步教程,如下所示:https://medium.com/@adrian_teh/ruby-on-rails-6-with-webpacker-and-bootstrap-step-by-step-guide-41b52ef4081f。另外,我还安装了一个准系统 Rails 6 核心应用程序,并安装了 jQuery、Bootstrap 和 popper.js,因此请随意克隆到存储库中,如下所示:https://github.com/Dijkie85/rails6core.git.

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让 Jquery 和 Bootstrap 与 Rails 6 配合使用 的相关文章

  • jQuery 已弃用“.toggle()”。寻求替代方法

    Since toggle was 已弃用 http bugs jquery com ticket 11786从 jQuery 我正在寻找一个新的简单解决方案 它将使我能够创建一个 阅 读更多 按钮 该按钮可以向下滑动一个段落 同时将按钮文本
  • jQuery - 如何检查元素是否存在?

    我知道你可以测试width or height 但是如果元素的 display 属性设置为 none 该怎么办 还有什么其他值可以检查以确保该元素存在 您可以使用length http api jquery com length 查看您的选
  • jquery循环遍历表,为每一行和td连接值

    我有一张有几行的桌子 每行都有一个产品字段 一个等级字段和一个系列字段 然后每个可用尺寸都有几个复选框 表中的一行如下所示 table class authors list border 0 tr td style font size 10
  • Rails 3.2 防止使用错误保存对象

    我有一个 ActiveRecord 对象 我想阻止它被保存 而不对模型进行永久验证 你曾经可以使用做这样的事情errors add但它看起来不再有效了 user User last user errors add name name doe
  • 未捕获的 ReferenceError: $ 未在 jQuery 中定义错误

    我有这个代码jQuery 文件名是 javascript js 我以前使用过 JavaScript document ready function readFile click function get test txt function
  • jQuery:计算数百个元素的点击次数

    这是我在SO 的第一个问题 基本上 我的页面上有大量元素 我想计算并显示用户单击每个元素的次数 但为此我需要为每个元素定义变量 难道就没有更简单的方法吗 对于一个元素 var counter 0 container on click fun
  • 使用 JavaScript 将数据插入数据库时​​,在控制台中创建错误“超出最大调用堆栈大小”

    我进行了大量搜索来修复过去几天遇到的 JavaScript 错误 我看到很多问题都得到了解答堆栈溢出 但不幸的是 没有人符合我的错误 我想要的是发送一个简单的记录到database using JavaScript and PHP 但我得到
  • 如何更改 ModelForm 中所有 Django 日期字段的默认小部件?

    给定一组典型模型 Application A from django db import models class TypicalModelA models Model the date models DateField Applicati
  • 如何使用 ASP.NET 和 jQuery 返回 JSON

    我不知道如何用我的代码返回 JSON 数据 JS function ajax type POST url Default aspx GetProducts data contentType application json charset
  • 在phonegap中播放本地声音

    我有一个 wav文件在我的www文件夹 我正在使用 jQuery 和以下代码 警报响起 但声音不播放 难道我做错了什么
  • 选择移动 Web HTML5 框架 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何让 Redis 在 Heroku 上启动?

    我已经添加了RedistogoHeroku 上的 nano 插件 我已经在控制台中成功测试了它 但是 当我的应用程序尝试连接 Redis 时 出现以下错误 Heroku 日志文件 2011 10 12T08 19 50 00 00 app
  • Highstock highcharts 不规则数据的 x 尺度错误

    我有不规则的数据 我使用时图表绘制得很好高图表 function var chart new Highcharts Chart chart renderTo chart xAxis type datetime series name Vol
  • 关联的验证错误消息变得简单

    我的应用程序中有相当多的belongs to关联 其中一些是可选的 即关联可能为零 一些是强制性的 关联必须是有效的父记录 我最初的方法是使用我自己的验证方法来验证给定的 id 此处为强制关联 belongs to category val
  • jQuery 的 css() 在应用于滚动事件时滞后

    我正在尝试实现一个简单的 固定标题 表 我知道这在理论上只能用 CSS 来完成 但是当涉及到 OSX Lion 及其消失的滚动条时 它效果不佳 所以我用 jQuery 来做 方法很简单 只有1 5行代码 inbox scroll funct
  • 如何用按钮打开所有infoWIndows

    现在我想添加打开所有引脚弹出窗口的按钮 infoWindows 所以我添加功能openAllInfoWindows并添加infoWindows i open 命令 但是不起作用 HTML 代码 a href Close a a href O
  • 添加多态引用的向下迁移是什么

    我有以下迁移 但不知道在其中使用什么down method change table addresses do t t references addressable polymorphic gt true end 实际上 change ta
  • Rails ActiveStorage:如何避免每个图像的一个重定向?

    如果您使用 ActiveStorage 并且您有一个包含 N 个图像的页面 您会收到对 Rails 应用程序的 N 个额外请求 即 N 个重定向 如果页面上有数十张图像 这意味着会浪费大量服务器资源 我知道重定向对于签名 URL 很有用 然
  • 如何调试速度慢得难以忍受的 Rails 资源预编译

    我正在开发一个 Rails 3 2 项目 尽管我不认为该项目很大 但近几个月来资产已经增加了相当多 资产由 JS 无咖啡脚本 和 SASS 文件组成 我们有很多图像 但从早期开始 它们出现的次数就更少了 所以我认为它们不是一个重要因素 我们
  • Bootstrap 3 多个导航栏

    我在 Twitter Bootstrap 3 中的多个引导程序中遇到问题 第一个导航栏可以正常调整大小和响应 第二个导航栏在正常分辨率下无法正常工作 但是当我尝试调整大小以响应并调整大小后 它可以正常工作 这是一些代码

随机推荐