Condición previa
Tengo 2 widgets personalizados que extienden el mismo widget principal.
- Widget principal:
Magento_ConfigurableProduct/js/configurable
- Primer widget personalizado:
Vendor_AModule/js/configurable
- Segundo widget personalizado:
Vendor_BModule/js/configurable
Primer widget personalizado require-config.js
:
var config = {
map: {
'*': {
configurable: 'Vendor_AModule/js/configurable'
}
}
};
Primer widget personalizado 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;
});
Segundo widget personalizado require-config.js
:
var config = {
map: {
'*': {
configurable: 'Vendor_BModule/js/configurable'
}
}
};
Segundo widget personalizado 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;
});
pasos para reproducir
Abro una página de interfaz de producto configurable.
Resultado Esperado
Los veo a ambos Custom widget B is triggered!
y Custom widget A is triggered!
alerta.
Resultado actual
Solo veo Custom widget B is triggered!
alerta.
Pregunta
¿Cómo debe ser el código para que la página de interfaz del producto configurable muestre alertas de ambos widgets?
fuente
mixin
AWidget
en su código, ¿cómo solicitarloBWidget
?BWidget
se implementaría igual queAWidget
.Asegúrese de que el módulo personalizado se cargue después de otros
module.xml
Podemos comprobar en
app/etc/config.php
. Su módulo personalizado debe ser de "nivel inferior" que otros.Podemos eliminar el módulo personalizado de la
setup_module
tabla. Y luego, ejecute el comando de actualización de configuración nuevamente para reordenar la secuencia del módulo.Necesitamos asegurarnos de que el js personalizado sea de "nivel inferior" que otros en
requirejs-config.js
.pub / static / _requirejs / frontend / Magento / luma / en_US / requirejs-config.js
Declarar el módulo B
Debido a que el widget A fue "anulado", el widget Magento predeterminado ya. Entonces, en el Módulo B, necesitamos cargar el widget A y "anularlo" .
app / code / Vendor / BModule / view / frontend / requirejs-config.js
app / code / Vendor / BModule / view / frontend / web / js / configurable.js
Después de todo, necesitamos ejecutar nuevamente la implementación de contenido estático.
Podemos leer más aquí: https://learn.jquery.com/jquery-ui/widget-factory/extending-widgets/#using-_super-and-_superapply-to-access-parents
fuente