Magento 2 Переопределяет JS модуля, но при первом запросе зависимости не загружаются - PullRequest
8 голосов
/ 22 июня 2019

Я хочу изменить макет HTML стороннего модуля, который отображает кнопки INC / DEC в поле ввода количества на странице описания продукта.

Для этого мне нужно переопределить JS стороннего модуля, который я сделал и работает нормально.

Проблема в том, что при первом запросе с пустым кешем его зависимости не загружаются и выдают следующую ошибку:

TypeError: $.widget is not a function (\app\code\MyCompany\General\view\frontend\web\js\qtycontrol.js)
TypeError: $(...).qtycontrol is not a function (where it has been called)

Обновление страницы один раз, чтобы она работала нормально.

Пожалуйста, ознакомьтесь с приведенными ниже деталями кода модуля, который я создал для переопределения, а также оригинального стороннего модуля.

Модуль переопределения (\ app \ code \ MyCompany \ General \ view \ frontend \ web \ js \ qtycontrol.js):

;define([
    'jquery',
    'jquery/ui'],
(function ($, window, document, undefined) {
    $.widget("infortis.qtycontrol", {
        , _create: function()
        {
            this._initPlugin();
        }
        , _initPlugin: function()
        {
            //Exetnded code to display inc/dec buttons on the quantity input field but with changes in HTML.
        }
    }); //end: widget
})(jQuery, window, document));

Модуль переопределения (\ app \ code \ MyCompany \ General \ view \ frontend \ requirejs-config.js):

var config = {
    map: {
        '*': {
            'qtycontrol': 'MyCompany_General/js/qtycontrol'
        }
    }
};

Модуль переопределения (\ app \ code \ MyCompany \ General \ etc \ module.xml):

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="MyCompany_General" setup_version="1.0.0">
        <sequence>
            <module name="Infortis_Base"/>
        </sequence>
    </module>
</config>

Оригинальный модуль стороннего производителя (\ app \ code \ Infortis \ Base \ view \ frontend \ web \ js \ qtycontrol.js):

;(function ($, window, document, undefined) {
    $.widget("infortis.qtycontrol", {
        , _initPlugin: function()
        {
            //Some code to display inc/dec buttons on the quantity input field.
        }
    }); //end: widget
})(jQuery, window, document);

Оригинальный модуль стороннего производителя (\ app \ code \ Infortis \ Base \ view \ frontend \ requirejs-config.js):

var config = {
    paths: {
        'qtycontrol': 'Infortis_Base/js/qtycontrol'
    },
    shim: {
        'qtycontrol': {
            deps: ['jquery', 'jquery/ui']
        }
    }
};

Я запускаю приложение в следующей среде:

  • Операционная система => Windows.
  • Пакет => WAMP

Поскольку я новичок в Magento 2, но хорошо знаю PHP и базовые концепции JavaScript. Но возможно, что не хватает какой-то базовой концепции. Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...