Condição prévia
Eu tenho 2 widgets personalizados que estendem o mesmo widget pai.
- Widget pai:
Magento_ConfigurableProduct/js/configurable
- Primeiro widget personalizado:
Vendor_AModule/js/configurable
- Segundo widget personalizado:
Vendor_BModule/js/configurable
Primeiro widget personalizado require-config.js
:
var config = {
map: {
'*': {
configurable: 'Vendor_AModule/js/configurable'
}
}
};
Primeiro JS de widget personalizado:
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;
});
Segundo widget personalizado require-config.js
:
var config = {
map: {
'*': {
configurable: 'Vendor_BModule/js/configurable'
}
}
};
Segundo JS de widget personalizado:
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;
});
Passos para reproduzir
Abro uma página de front-end de produto configurável.
resultado esperado
Eu vejo os dois Custom widget B is triggered!
e Custom widget A is triggered!
alerta.
Resultado atual
Eu só vejo Custom widget B is triggered!
alerta.
Questão
Como deve ser o código para que a página de front-end do produto configurável exiba alertas dos dois widgets?
fonte
mixin
AWidget
no seu código como se inscreverBWidget
?BWidget
seria implementado da mesma forma queAWidget
.Verifique se o módulo personalizado foi carregado após os outros
module.xml
Podemos fazer o check-in
app/etc/config.php
. Seu módulo personalizado deve ser "nível mais baixo" que outros.Podemos remover o módulo personalizado da
setup_module
tabela. E, em seguida, execute o comando setup upgrade novamente para reordenar a sequência do módulo.Precisamos garantir que o js personalizado seja "nível mais baixo" do que outros
requirejs-config.js
.pub / static / _requirejs / frontend / Magento / luma / pt_BR / requirejs-config.js
Declare o módulo B
Como o widget A foi "substituído", o widget Magento padrão já. Portanto, no Módulo B, precisamos carregar o widget A e "substituí-lo" .
app / code / Vendor / BModule / view / frontend / requirejs-config.js
app / code / Vendor / BModule / view / frontend / web / js / configurable.js
Afinal, precisamos executar a implantação de conteúdo estático novamente.
Podemos ler mais aqui: https://learn.jquery.com/jquery-ui/widget-factory/extending-widgets/#using-_super-and-_superapply-to-access-parents
fonte