Rails 4 jQuery 与 javascript 冲突

2024-03-29

我正在尝试在 Rails 4 中制作一个应用程序。

我正在挣扎。我正在尝试合并引导主题,但我遇到了供应商 JavaScript 和其余代码的问题。

我认为问题可能与我的 application.js 中的 jQuery 以及以“$”符号开头的供应商 .js 文件有关:

$.circleProgress = {

我刚刚读过这个:https://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/ https://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/

我的问题是,我不知道如何进行更改以使代码安全。

我是否需要搜索供应商文件中的每个“$”,或者如何在 jQuery 上放置一个安全包装器 - 尤其是通过 gem 合并的地方。

有没有人遇到过这些问题并找到解决方案?我很想得到一些帮助。

应用程序.js

//= require jquery
//= require bootstrap-sprockets
//= require jquery_ujs
//= require html.sortable
//= require disqus_rails
//= require moment
//= require bootstrap-datetimepicker
//= require pickers
//= require main
//= require hammer.min
//= require jquery.animate-enhanced.min
//= require jquery.countTo
//= require jquery.easing.1.3
//= require jquery.fitvids
//= require jquery.magnific-popup.min
//= require jquery.parallax-1.1.3
//= require jquery.properload
//= require jquery.shuffle.modernizr.min
//= require jquery.sudoSlider.min
//= require jquery.superslides.min
//= require masonry.pkgd.min
//= require rotaterator
//= require smoothscrolljs
//= require waypoints.min
//= require wow.min
//= require gmaps/google
//= require chosen-jquery
//= require cocoon
//= require imagesloaded.pkgd.min
//= require isotope.pkgd.min
//= require jquery.counterup.min
//= require jquery.pjax
//= require custom.js
//= require slider
//= require underscore
//= require dependent-fields
//= require_tree .
//= require bootstrap-slider


$(document).ready(function() {
    DependentFields.bind()
});

相关问题:Rails 4 - 合并供应商资产 https://stackoverflow.com/questions/36684671/rails-4-incorporating-vendor-assets

观察

我注意到控制台错误日志显示我的 app/assets/javascripts 文件夹中的 .js 文件存在问题。

它们是该文件夹中唯一的其他文件(除了 application.js 之外)。我的 application.js 有“require_tree”,因此它们将被编译。但我认为这些文件中的某些内容可能与 application.js 中包含的 jQuery 发生冲突?

日志显示:

Uncaught SyntaxError: Identifier 'findGoodContent' has already been declared
circle-progress.self-f67ec54c54a06da27d11cda862036a058792eadc8ef982df2e7c0a1682536c31.js:9 Uncaught TypeError: Cannot set property 'circleProgress' of undefined
conversations.self-832ece2867c1701a5202459ab73ecd6432da2a6c833d8822d37025845a0aefcc.js:10 Uncaught TypeError: $ is not a function
organisations.self-6547f734e3a69b76176dfe5bb194e428c0bc560ad3fb69811dce9c7f8ccb9f4d.js:2 Uncaught TypeError: $ is not a function
http://localhost:3000/assets/%3C%=%20asset_path('random.jpg')%20%%3E Failed to load resource: the server responded with a status of 400 (Bad Request)
http://localhost:3000/profiles/assets/images/grayscale.svg#greyscale Failed to load resource: the server responded with a status of 404 (Not Found)
http://localhost:3000/assets/vendor/assets/fonts/Simple-Line-Icons.woff Failed to load resource: the server responded with a status of 404 (Not Found)
http://localhost:3000/profiles/assets/custom/images/preloader.gif Failed to load resource: the server responded with a status of 404 (Not Found)
chrome-extension://mkjojgglmmcghgaiknnpgjgldgaocjfd/content/contentScripts/kwift.CHROME.min.js:1384 Uncaught SyntaxError: Identifier 'findGoodContent' has already been declared
http://localhost:3000/assets/flaticon.woff Failed to load resource: the server responded with a status of 404 (Not Found)
http://localhost:3000/assets/vendor/assets/fonts/Simple-Line-Icons.ttf Failed to load resource: the server responded with a status of 404 (Not Found)
http://localhost:3000/assets/flaticon.ttf Failed to load resource: the server responded with a status of 404 (Not Found)
main.self-5888479bd3eb03114ce5776dd32cfadf84f1d3a4335043513f8b1606d3ab5f4a.js:316 Uncaught TypeError: dp(...).multipleFilterMasonry is not a function

每个被标识为错误的 js 文件夹都会在 app/assets/javascripts 中保存为 .js 文件。

我是否需要使用不同的文件名(.js.erb / js.coffee)?使这项工作成功。或者,我是否需要在这些文件的内容周围放置脚本标签?

例如,第一个文件打开时为:

$.circleProgress = {
    // Default options (you may override them)
    defaults: {
        /**
         * This is the only required option. It should be from 0.0 to 1.0
         * @type {float}
         */
        value: 0,

UPDATE

我认为我的问题的一部分与保存在 app/assets/javascripts 中带有“.js”扩展名的文件有关。每个错误都在控制台错误列表中显示为:

kwift.CHROME.min.js:1271Uncaught SyntaxError: Identifier 'findGoodContent' has already been declared
circle-progress.self-f67ec54….js?body=1:9 Uncaught TypeError: Cannot set property 'circleProgress' of undefined(anonymous function) @ circle-progress.self-f67ec54….js?body=1:9
conversations.self-832ece2….js?body=1:10 Uncaught TypeError: $ is not a function(anonymous function) @ conversations.self-832ece2….js?body=1:10
organisations.self-6547f73….js?body=1:2 Uncaught TypeError: $ is not a function(anonymous function) @ organisations.self-6547f73….js?body=1:2(anonymous function) @ organisations.self-6547f73….js?body=1:6
projects.self-9c019ba….js?body=1:1 Uncaught TypeError: $ is not a function(anonymous function) @ projects.self-9c019ba….js?body=1:1
main.self-5888479….js?body=1:316 Uncaught TypeError: dp(...).multipleFilterMasonry is not a functionwindow.onload @ main.self-5888479….js?body=1:316
kwift.CHROME.min.js:1271 Uncaught SyntaxError: Identifier 'findGoodContent' has already been declared

听起来你有很多清理工作要做。这是您的第一个 Rails 应用程序吗?如果是这样,我很好奇为什么你已经有这么多 JS 文件。我会把你的清单削减到只有几个,解决剩下的问题,然后慢慢开始添加东西并解决问题。这将是我的总体策略。对于每个错误,在你到处削减希望修复之前,慢慢地仔细检查你是否真正理解了原因。

以下是针对我发现的特定错误的一些提示:

该行将包括所有.js文件在app/assets/javascripts:

//= require_tree .

问题是你已经在上面一一包含了它们。所以他们被列入两次。这就是为什么你会收到类似警告'findGoodContent' has already been declared。我知道它用起来很好require_tree(虽然我不喜欢它),所以如果你想保留它,请考虑将所有第 3 方 JS 文件移出app/assets/javascripts并进入vendor/assets/javascripts。你仍然可以require他们在你的application.js,但它们不会被重复require_tree.

404 错误,例如grayscale.svg and flaticon.woff和其他图像/字体资源是因为你没有这些文件app/assets (or vendor/assets)。或者如果你这样做,你应该确保你的 JS/CSS 文件和视图文件引用它们<%= asset_path "grayscale.svg" %>这样当 Rails 破坏它们的路径时,您仍然可以从正确的位置加载它们。阅读image_url 和朋友 https://stackoverflow.com/questions/21147005/difference-between-sass-rails-helpers-image-url-and-asset-url-in-rails-4-0并确保您了解它们的工作原理。默认情况下,资产管道在开发中提供未损坏的名称,在生产中提供损坏的名称,因此在您将其全部上线之前,事情可能会正常进行!

另外,如果您包括<%= foo %>CSS文件或JS文件中的标签,那么你需要添加一个.erb该文件的扩展名,以便 Rails 知道如何处理这些标签。这就是为什么你在尝试加载此内容时会收到 404 错误:

http://localhost:3000/assets/%3C%=%20asset_path('random.jpg')%20%%3E

在您的一个文件(可能是 CSS 文件)中,您正在执行以下操作:

background-image: url("<%= asset_path('random.jpg') %>");

但该文件需要一个.erb扩大:blah.css.erb or blah.scss.erb管他呢。

错误如$ is not a function意味着这些文件依赖于 jQuery,但是 jQuery$对象未定义。如果您正在使用noConflict,正如有人在评论中建议的那样,你应该停止,因为你do want $成为 jQuery 对象。

祝你好运!如果你感到不知所措,我真的会从删除尽可能多的 JS 开始require尽可能多的线路,并一次解决一个错误。

另外,我会重新订购require行,以便依赖项位于顶部(例如 jquery),而依赖它们的东西位于较低位置。

哦,还有一件事,这并不是一个真正的错误:我会避免放置已经缩小的文件(例如hammer.min.js)到您的存储库中。资产管道知道如何缩小。因此,请检查未缩小的版本,这样如果您必须阅读源代码,您就可以。

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

Rails 4 jQuery 与 javascript 冲突 的相关文章

随机推荐

  • R 控制台可以支持后台任务或中断(事件处理)吗?

    在 R 控制台中工作时 我想设置一个后台任务来监视特定连接 并在发生事件时执行另一个函数 警报 或者 我可以进行设置 以便外部函数仅向 R 发送警报 但这似乎是同一个问题 有必要设置一个侦听器 我可以在 R 的专用进程中执行此操作 但我不知
  • 创建对象时抛出异常

    执行catch语句时是否会创建异常对象 例如 catch ArithmeticException someObject 该对象是否不必显式创建为实例 有两件事创建异常的实例第二抛出异常 创建异常的实例例如 看起来像创建类的任何实例NullP
  • Ansible 中的角色和任务(和标签)有什么区别?

    我发现自己很困惑roles and tasks每时每刻 我知道标签是标记单个项目的一种方式 但我很困惑如何使用它们 假设我必须执行以下操作 Users Create a user named deploy Add ssh key for d
  • 如何解组嵌套的未知字段

    我分叉了一个很棒的项目here https github com sridharv reddit go blob master types go 并且刚刚把它弄得一团糟 学习了一些Go 我无法弄清楚的问题是有关自定义解组的一些事情 如果您看
  • 如何从作业中设置环境变量并在詹金斯的下一个作业中使用它?

    我想要一份设置环境变量的工作 并在接下来的所有工作中使用这些环境变量 如何通过 Jenkins 设置环境变量 从技术上讲 您无法将环境变量从一个作业传递到下一个作业 而且我不知道有一个插件可以开箱即用地执行此操作 不过有一个技巧 这个想法是
  • 如何使用多个类的序列化来实现备份和恢复?

    我正在尝试序列化存储在 JTable 中的对象 名称和注释 我希望能够将此信息保存到文件中 并且当我加载程序时 该信息应加载到 JTable 中 当我单击备份按钮时 正在创建一个文件 但没有存储任何数据 有人可以指导我正确的方向并告诉我我做
  • 将 Python Opencv 图像(numpy 数组)转换为 PyQt QPixmap 图像

    我正在尝试将 python opencv 图像转换为 QPixmap 我按照说明进行操作页面链接 http russellj tumblr com post 44845729156 convert python opencv image n
  • 编辑中的字段唯一(已采用)?

    当我编辑用户时 我遇到验证问题 因此 当我编辑时 我收到消息称该名称已被占用 我怎样才能解决这个问题 因为该名称属于该用户 所以我需要再次更改名称 以便我可以编辑我的用户 if user gt business user this gt v
  • 如何编辑 Visual Studio Code 的默认深色主题?

    我使用的是 Windows 7 64 位 有没有办法在 Visual Studio Code 中编辑默认的深色主题 在 USERPROFILE vscode文件夹中只有扩展中的主题 而在安装路径中 我使用默认值 C Program File
  • Windows Azure /Windows Server 2008 R2 中的 NAudio

    我在用NAudio http naudio codeplex com 将几个 mp3 文件合并在一起以形成 Windows Azure 产品 它在开发环境中工作正常 但一旦我将其上传到 Azure 我就会收到 无驱动器调用 acmForma
  • Java 中的 \x 转义?

    我想知道 Java 中是否有类似 C 中的十六进制 x 转义 例如 char helloworld x48 x45 x4C x4C x4F x20 x57 x47 x52 x4C x44 printf s helloworld 从目前看来
  • Vaadin:如何将 META-INF/服务添加到战争中?

    我有一个 Vaadin 7 maven Web 项目 其中有一些注释可以在其上创建服务定义META INF services 我将其添加到 pom 中 以便处理注释
  • GCP Pub/Sub,如果已经有活动订阅,您可以在新订阅上重播旧消息吗

    在 GCP Pub Sub 中 我有一个主题和一个Subscription1并已开始发布消息 我可以添加另一个订阅吗Subscription2并重播之前发布的旧消息Subscription2被创造了 它会允许吗 卡夫卡允许 在什么时候我会失
  • C++ 模板正式排序规则

    我很难理解 D Vandevoorde 和 N M Josuttis 所著的 C 模板完整指南 一书第 12 章中描述的正式排序规则的工作原理 在本书第 188 页 作者给出了以下场景 用于确定两个可行的函数模板中哪一个更专业 从这两个模板
  • Flutter - 获取 SHA-1 证书 - Android Studio 3.2.1

    我正在尝试检索我的 Flutter 项目的 SHA 1 指纹证书 这通常可以通过进入 Android Studio 右侧的 Gradle 面板并单击signingReport 然而问题是 在 Flutter 中 它根本不显示 Gradle
  • Laravel 可以处理高流量应用程序吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在开发一个 PHP MySQL 社交网络项目 该项目将包含许多模块 部分 包括 用户系统 权限 配置文件 设置等 stackoverflow
  • Tomcat 9 的 Maven 插件

    除了 tomcat7 maven plugin 之外 我没有找到任何 tomcat maven plugin 我可以将其与 apache tomcat 9 0 0 M15 一起使用吗 您可以使用该插件部署到单独运行的 tomcat 9 Th
  • 自定义样式的 AlertDialog 的样式属性

    我正在尝试设计我的 AlertDialog 的样式 并且我已经能够通过样式和 xml 声明更改其中的大部分内容 但仍然存在一些问题 如何将标题栏周围的区域从黑色更改为我的自定义颜色 如何将外部背景更改为透明 阴影落在蓝色的外部部分 如何更改
  • “yes”这个程序有什么重要用途吗?

    当我第一次遇到yes nix 中的程序我想不出它有什么重要用途 这个程序是如何使用的 yes旨在自动化需要在采取行动之前确认的交互式程序 yes rm ri foo 大致相当于 rm rf foo 不同之处在于 f失败时也会继续
  • Rails 4 jQuery 与 javascript 冲突

    我正在尝试在 Rails 4 中制作一个应用程序 我正在挣扎 我正在尝试合并引导主题 但我遇到了供应商 JavaScript 和其余代码的问题 我认为问题可能与我的 application js 中的 jQuery 以及以 符号开头的供应商