Condition préalable
J'ai 2 widgets personnalisés étendant le même widget parent.
- Widget parent:
Magento_ConfigurableProduct/js/configurable
- Premier widget personnalisé:
Vendor_AModule/js/configurable
- Deuxième widget personnalisé:
Vendor_BModule/js/configurable
Premier widget personnalisé require-config.js
:
var config = {
map: {
'*': {
configurable: 'Vendor_AModule/js/configurable'
}
}
};
Premier widget personnalisé 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;
});
Deuxième widget personnalisé require-config.js
:
var config = {
map: {
'*': {
configurable: 'Vendor_BModule/js/configurable'
}
}
};
Deuxième widget personnalisé 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;
});
Étapes à reproduire
J'ouvre une page frontend de produit configurable.
résultat attendu
Je vois les deux Custom widget B is triggered!
et Custom widget A is triggered!
alerte.
Résultat actuel
Je ne vois que l' Custom widget B is triggered!
alerte.
Question
Comment le code doit-il être pour que la page frontend du produit configurable affiche les alertes des deux widgets?
la source
mixin
AWidget
dans votre code, comment postulerBWidget
?BWidget
serait mis en œuvre de la même manière queAWidget
.Assurez-vous que le module personnalisé est chargé après les autres
module.xml
Nous pouvons nous enregistrer
app/etc/config.php
. Votre module personnalisé doit être de "niveau inférieur" que les autres.Nous pouvons supprimer le module personnalisé de la
setup_module
table. Ensuite, exécutez à nouveau la commande setup upgrade pour réorganiser la séquence du module.Nous devons nous assurer que le js personnalisé est "de niveau inférieur" que les autres
requirejs-config.js
.pub / statique / _requirejs / frontend / Magento / luma / en_US / requirejs-config.js
Déclarez le module B
Parce que le widget A a été "remplacé" par le widget Magento par défaut. Donc, dans le module B, nous devons charger le widget A et le "remplacer" .
app / code / Vendeur / BModule / view / frontend / requirejs-config.js
app / code / Vendeur / BModule / view / frontend / web / js / configurable.js
Après tout, nous devons réexécuter le déploiement de contenu statique.
Nous pouvons en savoir plus ici: https://learn.jquery.com/jquery-ui/widget-factory/extending-widgets/#using-_super-and-_superapply-to-access-parents
la source