Voraussetzung
Ich habe 2 benutzerdefinierte Widgets, die dasselbe übergeordnete Widget erweitern.
- Übergeordnetes Widget:
Magento_ConfigurableProduct/js/configurable
- Erstes benutzerdefiniertes Widget:
Vendor_AModule/js/configurable
- Zweites benutzerdefiniertes Widget:
Vendor_BModule/js/configurable
Erstes benutzerdefiniertes Widget require-config.js
:
var config = {
map: {
'*': {
configurable: 'Vendor_AModule/js/configurable'
}
}
};
Erstes benutzerdefiniertes 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;
});
Zweites benutzerdefiniertes Widget require-config.js
:
var config = {
map: {
'*': {
configurable: 'Vendor_BModule/js/configurable'
}
}
};
Zweites benutzerdefiniertes 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;
});
Schritte zum Reproduzieren
Ich öffne eine konfigurierbare Produkt-Frontend-Seite.
erwartetes Ergebnis
Ich sehe beides Custom widget B is triggered!
und bin Custom widget A is triggered!
wachsam.
Tatsächliche Ergebnis
Ich sehe nur Custom widget B is triggered!
Alarm.
Frage
Wie sollte der Code sein, damit auf der konfigurierbaren Produkt-Frontend-Seite Warnungen beider Widgets angezeigt werden?
quelle
mixin
AWidget
in Ihrem Code sehen, wie man sich bewirbtBWidget
.BWidget
würde genauso umgesetzt werden wieAWidget
.Stellen Sie sicher, dass das benutzerdefinierte Modul nach anderen geladen wurde
module.xml
Wir können einchecken
app/etc/config.php
. Ihr benutzerdefiniertes Modul sollte "niedriger" sein als andere.Wir können das benutzerdefinierte Modul aus der
setup_module
Tabelle entfernen . Führen Sie dann den Befehl setup upgrade erneut aus, um die Modulsequenz neu zu ordnen.Wir müssen sicherstellen, dass das benutzerdefinierte js "niedriger" ist als andere in
requirejs-config.js
.pub / static / _requirejs / frontend / Magento / luma / de_DE / requirejs-config.js
Deklarieren Sie das Modul B.
Da das A-Widget bereits über das Standard-Magento-Widget "überschrieben" wurde. In Modul B müssen wir also das Widget A laden und es "überschreiben" .
app / code / Vendor / BModule / view / frontend / requirejs-config.js
app / code / Vendor / BModule / view / frontend / web / js / configure.js
Schließlich müssen wir die Bereitstellung statischer Inhalte erneut ausführen.
Wir können hier mehr lesen: https://learn.jquery.com/jquery-ui/widget-factory/extending-widgets/#using-_super-and-_superapply-to-access-parents
quelle