#ruby-on-rails #rails-ujs
#ruby-on-rails #rails-ujs
Вопрос:
в app/javascript/packs/application.js
я вижу: const { $ } = require("@rails/ujs");
По какой-то неизвестной причине я получаю эту ошибку:
rails-ujs.js:73 Uncaught DOMException: Failed to execute 'querySelectorAll' on 'Document': '[object HTMLDocument]' is not a valid selector.
at ./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js.Rails.$ (http://192.168.1.34:3000/packs/js/application-82ae508a0043ae1b2583.js:1497:52)
at Object../app/javascript/packs/application.js (http://192.168.1.34:3000/packs/js/application-82ae508a0043ae1b2583.js:207:1)
at __webpack_require__ (http://192.168.1.34:3000/packs/js/application-82ae508a0043ae1b2583.js:20:30)
at http://192.168.1.34:3000/packs/js/application-82ae508a0043ae1b2583.js:84:18
at http://192.168.1.34:3000/packs/js/application-82ae508a0043ae1b2583.js:87:10
Когда я комментирую строку: const { $ } = require("@rails/ujs");
— тогда ошибка исчезает, но я не знаю, нужна ли мне эта строка или нет?
Раньше этой ошибки не было … хотелось бы, чтобы у меня было больше деталей, но у меня их нет.
Комментарии:
1. Обработчик Rails UJS предоставляет функциональные возможности для ссылок с
data-method
опцией, подтверждениями и ajax сremote: true
формами и ссылками.require
это директива для webpacker, которая импортирует зависимость в ваш пакет. guides.rubyonrails.org/working_with_javascript_in_rails.html2. Вы пытались посмотреть на github, чтобы узнать, связано ли это с проблемой с вашей версией Rails? Наиболее вероятной причиной здесь является то, что здесь есть некоторый код, который ожидает
$
, что это будет jQuery, и вместо этого он использует собственныйquerySelectorAll
, который не принимает объект, подобный jquery.3. @max хорошо, я думаю, это может быть потому
application.js
, что я добавляю свою логику приложения, похоже, я должен поместить свою логику приложения в пакеты, а затем импортировать ееapplication.js
, верно? Я думаю, именно поэтому я получаю ошибку. Я пишу код, который использует$
символ, как если бы это был jQuery, и я вкладываю в него эту логикуapp/javascript/packs/application.js
, просто делая это для удобства, но, возможно, я не должен этого делать?4. Ну, для начала не используйте Rails UJS, как если бы это был jquery. Последняя версия не зависит от jquery. Я не думаю, что вам действительно нужно назначать модуль константе
$
здесь. Не уверен, почему это сделано в первую очередь.5. Если вы хотите использовать jQuery и избежать конфликтов, просто используйте IIFE .
(function($){ // code goes here }(jQuery));
.