【问题标题】:Drupal 8 jQuery is undefined in module twig viewDrupal 8 jQuery 在模块树枝视图中未定义
【发布时间】:2016-12-30 15:50:20
【问题描述】:

我正在尝试开发我的第一个 Drupal 8 模块,但我不明白为什么 jQuery 在我的 twig 模板中未定义。

在我的代码块中,我调用了控制器函数:

public function build() {
    $config = $this->getConfiguration();
    $slider = new OsTouchController;

    return $slider->displaySlider($config['id']);    
}

然后在控制器中:

public function displaySlider($slider_id) {
    $oss_params = $this->getSliderParams($slider_id);
    return array(
      '#theme' => 'slider_default',
      '#oss_params' => $oss_params,
      '#attached' => array(
            'library' =>  array(
                'ostouch_slider/ostouch.slider' 
            ),
        ),
    );
}

最后在树枝上我有这样的脚本代码:

jQuery(document).ready(function($) {
      var mySliderSetings = new osSliderSettings("#dragable-settings-block",{
        crop :                        {{ oss_params.crop_image }},
        parallax :                    {{ oss_params.parallax }},
        imageWidth:                   {{ oss_params.image_width }},
        imageHeight:                  {{ oss_params.image_height }},
        site_path :                   '{{ "http://" }}',
        moduleId :                    {{ oss_params.modId }},
        lazyLoading :                 {{ oss_params.lazyLoading }},
        lazyLoadingInPrevNext :       {{ oss_params.lazyLoadingInPrevNext }},
        lazyLoadingInPrevNextAmount : {{ oss_params.lazyLoadingInPrevNextAmount }},
        textOrdering:                 {{ oss_params.textOrdering }},
        screenW :                     screenW,
        screenH :                     screenH,
        setupAnimation :              setupAnimation,
        swiperSlider :                mySwiper
      });
    });

当然我得到一个错误:

"Uncaught ReferenceError: jQuery is not defined"

因为包含的所有脚本都在页面底部。

我找不到可以帮助我在页面底部显示脚本代码的脚本函数。 我无法在 js 文件中编写此代码,因为脚本中的参数可以更改。 我可以从隐藏的输入中读取参数,但我认为在 Drupal 中存在另一种方式......

谁能帮帮我?我做错了什么?

【问题讨论】:

    标签: drupal drupal-modules drupal-8


    【解决方案1】:

    使用 Drupal.behaviors 而不是 document.ready。阅读它HERE。

    例如。

    Drupal.behaviors.myBehavior = {
      attach: function (context, settings) {
          var mySliderSetings = new osSliderSettings("#dragable-settings-block",{
            crop :                        {{ oss_params.crop_image }},
            parallax :                    {{ oss_params.parallax }},
            imageWidth:                   {{ oss_params.image_width }},
            imageHeight:                  {{ oss_params.image_height }},
            site_path :                   '{{ "http://" }}',
            moduleId :                    {{ oss_params.modId }},
            lazyLoading :                 {{ oss_params.lazyLoading }},
            lazyLoadingInPrevNext :       {{ oss_params.lazyLoadingInPrevNext }},
            lazyLoadingInPrevNextAmount : {{ oss_params.lazyLoadingInPrevNextAmount }},
            textOrdering:                 {{ oss_params.textOrdering }},
            screenW :                     screenW,
            screenH :                     screenH,
            setupAnimation :              setupAnimation,
            swiperSlider :                mySwiper
          });
      }
    };
    

    【讨论】:

    • 我正在尝试使用行为,但我得到了同样的错误(jQuery 或 Drupal 未定义)。当我在一些 custom.js 文件中使用我的脚本时,它可以正常工作,但不能在 twig 中。我可以在树枝模板中使用脚本吗?也许我在控制器中调用模板时出错了?
    • 您确定页面上正在加载 jQuery 吗?
    • 是的。加载页面后,我在控制台中调用 jQuery 函数,它正在工作。 jQuery 包含在页面底部。
    • 除了我检查核心模块并仅在 .js 文件中而不是在树枝中找到 Drupal.behaviors。我认为主要问题是树枝视图在脚本包含之前呈现。我可以通过drupal函数从.js文件中的控制器传递一些变量吗?
    猜你喜欢
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多