Warunek wstępny
Mam 2 niestandardowe widżety rozszerzające ten sam widżet nadrzędny.
- Widżet nadrzędny:
Magento_ConfigurableProduct/js/configurable
- Pierwszy niestandardowy widget:
Vendor_AModule/js/configurable
- Drugi niestandardowy widget:
Vendor_BModule/js/configurable
Pierwszy niestandardowy widget require-config.js
:
var config = {
map: {
'*': {
configurable: 'Vendor_AModule/js/configurable'
}
}
};
Pierwszy niestandardowy widget JS:
define([
'jquery',
'mage/translate',
'Magento_ConfigurableProduct/js/configurable'
], function ($) {
$.widget('vendor.configurable_awidget', $.mage.configurable, {
/**
* {@inheritDoc}
*/
_configureElement: function (element) {
this._super(element);
alert('Custom widget A is triggered!');
}
});
return $.vendor.configurable_awidget;
});
Drugi niestandardowy widget require-config.js
:
var config = {
map: {
'*': {
configurable: 'Vendor_BModule/js/configurable'
}
}
};
Drugi niestandardowy widget JS:
define([
'jquery',
'mage/translate',
'Magento_ConfigurableProduct/js/configurable'
], function ($) {
$.widget('vendor.configurable_bwidget', $.mage.configurable, {
/**
* {@inheritDoc}
*/
_configureElement: function (element) {
this._super(element);
alert('Custom widget B is triggered!');
}
});
return $.vendor.configurable_bwidget;
});
kroki ku reprodukcji
Otwieram konfigurowalną stronę frontonu produktu.
Spodziewany wynik
Widzę oba Custom widget B is triggered!
i Custom widget A is triggered!
czujny.
Aktualny rezultat
Widzę tylko Custom widget B is triggered!
alarm.
Pytanie
Jak powinien wyglądać kod, aby konfigurowalna strona nakładki produktu wyświetlała ostrzeżenia o obu widżetach?
źródło
mixin
AWidget
w twoim kodzie, jak się zgłosićBWidget
?BWidget
byłoby zaimplementowane tak samo jakAWidget
.Upewnij się, że moduł niestandardowy został załadowany po innych
module.xml
Możemy się zameldować
app/etc/config.php
. Twój moduł niestandardowy powinien być „niższy poziom” niż inne.Możemy usunąć niestandardowy moduł z
setup_module
tabeli. Następnie ponownie uruchom polecenie setup upgrade, aby ponownie zamówić sekwencję modułów.Musimy upewnić się, że niestandardowy plik js jest „niższy poziom” niż inne w
requirejs-config.js
.pub / static / _requirejs / frontend / Magento / luma / en_US / Requjs-config.js
Zadeklaruj moduł B
Ponieważ widżet A został już „zastąpiony” domyślnym widżetem Magento. Tak więc w module B musimy załadować widżet A i „go przesłonić” .
app / code / Vendor / BModule / view / frontend / Requjs-config.js
app / code / Vendor / BModule / view / frontend / web / js / configurable.js
W końcu musimy ponownie uruchomić wdrażanie zawartości statycznej.
Możemy przeczytać więcej tutaj: https://learn.jquery.com/jquery-ui/widget-factory/extending-widgets/#using-_super-and-_superapply-to-access-parents
źródło