Jquery .once() проблема с Drupal 8

Недавно я настроил FullCalendar v3 с моим проектом Drupal 8, он отлично работает, и все функции применяются.

Проблема связана с JQUERY 3.3.1, который я импортировал как конфигурацию с FullCalendar.

Когда я игнорирую этот Jquery для загрузки, проблема будет решена, но FullCalendar больше не будет работать.

Я получил эти ошибки:

Uncaught TypeError: $(...).once is not a function

Uncaught TypeError: Cannot set property 'Bridge' of undefined

Uncaught TypeError: $(...).find(...).once is not a function

Я ищу эти ошибки и пробую лучший результат совпадения, но еще не исправлен. Я перехожу на другой jquery, активирую основную тему вместо подтемы, но не получаю результата.

Это моя библиотека модулей.yml

amt_scripts:
  version: 1.x
  css:
    theme:
      assets/css/bootstrap.min.css: {}
      assets/css/fullcalendar.css: {}
      assets/css/amt_dayview.css: {}
  js:
    # assets/js/jquery-1.9.1.js: {}
    assets/js/jquery.min.js: {}
    assets/js/jquery-ui.min.js: {}
    assets/js/bootstrap.min.js: {}
    assets/js/moment.min.js: {}
    assets/js/fullcalendar.min.js: {}
    assets/js/scheduler.min.js: {}
    assets/js/popper.min.js: {}
    assets/js/amt_dayview.js: {}
  dependencies:

Тема «Образ Батрика»: Jquery .once() проблема с Drupal 8

Я не вижу, чтобы это имело какое-либо отношение к fullCalendar напрямую: google.com/… . Вы изучали какой-либо из множества существующих ресурсов, обсуждающих эту ошибку?

ADyson 25.07.2019 08:29

Да, я упомянул, что проверяю большинство из них, например, меняю версию Jquery, удаляю ее, но не работаю.

Nasser Ali Karimi 25.07.2019 08:52

Большинство ответов, которые я читал, говорили о проблемах с файлом темы начальной загрузки, а не о jQuery. .once() не является основным методом jQuery.

ADyson 25.07.2019 08:57

Я не согласен, я просто перехожу на тему drupal, такую ​​​​как Batrik, и проблема возникает и с ней, вы можете увидеть изображение результата в вопросе, который я добавил сейчас. @ADyson

Nasser Ali Karimi 25.07.2019 09:10

Ну, это все еще факт, что .once() не является основным методом jQuery или чем-то связанным с fullCalendar. Это что-то связанное с Drupal. Ваша проблема не была (напрямую) вызвана установкой fullCalendar, а скорее тем, от чего она зависит. Судя по sqndr.github.io/d8-theming-guide/javascript/behaviors.html, вам нужно убедиться, что у вас есть ссылка на файл, связанный с Drupal, чтобы он работал.

ADyson 25.07.2019 10:24
drupal.stackexchange.com/questions/244492/jquery-once-onload также упоминает, что это функция, созданная Drupal. И здесь также drupal.org/docs/8/api/javascript-api/javascript-api-обзор
ADyson 25.07.2019 10:27
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
6
1 764
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы добавили зависимости, такие как

dependencies:
- core/jquery
- core/drupal.ajax
- core/drupal
- core/drupalSettings
- core/jquery.once

Да, я нашел это и исправил проблему, добавив зависимость, но не только это. Я меняю свой хук вложения, который загружает это, на хук страницы вложения.

Nasser Ali Karimi 03.08.2019 06:31

В любом случае вы можете добавить его в библиотеки и подключить библиотеку или использовать хук.

vinay kumar 03.08.2019 16:04
Ответ принят как подходящий

Я использую такие зависимости и добавляю jquery из ядра Drupal.

amt_scripts:
  version: 1.x
  css:
    theme:
      assets/css/fullcalendar.css: {}
  js:
    assets/js/popper.min.js: {}
    assets/js/bootstrap.min.js: {}
    assets/js/moment.min.js: {}
    assets/js/fullcalendar.min.js: {}
    assets/js/scheduler.min.js: {}
    assets/js/amt_dayview.js: {}
  dependencies:
    - core/jquery
    - core/jquery-ui

но этот подход будет работать с hook_page_attachments для добавления библиотеки:

ПРОБЛЕМА этот метод добавит библиотеку на всю страницу, но я хочу, чтобы она была на определенной странице, которую необходимо проверить с текущим путем.

/**
 * Implemets hook_page_attachments().
 */
function amt_dayview_page_attachments(array &$attachments) {
  // Attach dayview Script just working fine with this hook.
  // But it is need to load just for dayview page.
  if (\Drupal::service('path.current')->getPath() == '/day-view') {
    // Unconditionally attach an asset to the page.
    $attachments['#attached']['library'][] = 'amt_dayview/amt_scripts';    
  }
}

Другие вопросы по теме