【问题标题】:Jquery .once() issue with Drupal 8Drupal 8 的 Jquery .once() 问题
【发布时间】:2019-07-25 06:14:30
【问题描述】:

最近我用我的 Drupal 8 项目配置了 FullCalendar v3,它运行良好并且应用了所有功能。

问题与我使用 FullCalendar 作为配置导入的 JQUERY 3.3.1 有关。

当我忽略这个 Jquery 来加载问题时,这个问题将得到解决,但 FullCalendar 将不再工作。

我收到了这些错误:

未捕获的类型错误:$(...).once 不是函数

未捕获的类型错误:无法设置未定义的属性“桥”

未捕获的类型错误:$(...).find(...).once 不是函数

我搜索这些错误并尝试最佳匹配结果,但尚未修复。 我换成其他jquery,激活主主题而不是子主题,但没有结果。

这是我的模块 library.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:

Batrik 主题的形象:

【问题讨论】:

  • 我看不出这与 fullCalendar 直接有什么关系:google.com/…。您是否查看过许多讨论此错误的现有资源?
  • 是的,我提到我检查了其中大多数,比如更改 Jquery 版本,删除它但不起作用。
  • 我读到的大部分答案似乎都在谈论引导主题文件的问题,而不是 jQuery。 .once() 不是核心 jQuery 方法
  • 我不同意,我只是换了一个像 Batrik 这样的 drupal 主题,问题也发生了,你可以在我现在添加的问题中看到结果的图像。 @ADyson

标签: javascript jquery drupal


【解决方案1】:

你是否添加了类似的依赖项

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

【讨论】:

  • 是的,我发现这个问题并通过添加依赖项解决了这个问题,但不仅仅是这个。我更改了将其加载到附件页面挂钩的附件挂钩。
  • 无论哪种方式,您都可以将其添加到库并附加库或使用钩子。
【解决方案2】:

我使用这样的依赖项并从 Drupal 核心添加 jquery

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 一起使用,以添加库:

ISSUE此方法会将库添加到所有页面,但我希望它在需要使用当前路径检查的特定页面上。

/**
 * 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';    
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多