In den Shopware Javascript Plugins werden Callback-Funktionen angelegt:
this.$emitter.publish('beforeSomething');
Wie kann ich die jetzt in meinem Plugin subsciben?
In den Shopware Javascript Plugins werden Callback-Funktionen angelegt:
this.$emitter.publish('beforeSomething');
Wie kann ich die jetzt in meinem Plugin subsciben?
Die Events, auf die ich eine Callback Funktion anwenden möchte, sind in Resources\app\storefront\src\plugin\header\search-widget.plugin.js
this.$emitter.publish('afterSuggest');
und this.$emitter.publish('clearSuggestResults');
Folgendes habe ich:
import Plugin from 'src/plugin-system/plugin.class';
export default class MyPlugin extends Plugin {
_afterSuggest(event) {
console.log('MyPlugin._afterSuggest()'); // wird nicht ausgegeben
}
_clearSuggestResults(event) {
console.log('MyPlugin._clearSuggestResults()'); // wird nicht ausgegeben
}
init() {
console.log('MyPlugin.init()'); // wird ausgegeben
var d = document.$emitter.subscribe('clearSuggestResults', this._clearSuggestResults.bind(this));
console.log(d); // true
d = document.$emitter.subscribe('afterSuggest', this._clearSuggestResults.bind(this));
console.log(d); // true
}
}
Leider wird hier nur init()
und nicht _afterSuggest()
und _clearSuggestResults()
ausgeführt. d
ist in beiden fällen true
. Was mache ich falsch?
Hier nochmal das Plugin:
import Plugin from 'src/plugin-system/plugin.class';
export default class SmartSearchPlugin extends Plugin {
static options = {
smartSearchEventStart: 'afterSuggest',
smartSearchEventEnd: 'clearSuggestResults'
};
_searchStart(event) {
console.log('SmartSearchPlugin._searchStart()');
}
_searchEnd(event) {
console.log('SmartSearchPlugin._searchEnd()');
}
init() {
console.log('SmartSearchPlugin.init()'); // wird ausgegeben
document.$emitter.subscribe(
this.options.smartSearchEventStart,
this._searchStart.bind(this)
);
document.$emitter.subscribe(
this.options.smartSearchEventEnd,
this._searchEnd.bind(this)
);
}
}
Ich möchte einfach einen Trigger, wenn das Live-Suchergebnis ausgespielt bzw. wieder geschlossen wurde. Leider werden die beiden Events aber komplett ignoriert, wenn ich in der Storefront die Suche betätige.
Der Storefront build ist auch korrekt:
(window.webpackJsonp=window.webpackJsonp||[]).push([["smart-search"],{"s+w2":function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e,t){for(var n=0;n
Ich komme hier grade überhaupt nicht weiter und würde mich freuen, wenn jemend einen Hinweis hat.
Alles klar, jetzt habe ich es.
Da $emitter
auf die Plugin-Instanz (this.$emitter.publish(...
) published, muss ich auch auf die Instanz subscriben:
var searchWidgetPlugin = PluginManager.getPluginInstances('SearchWidget');
if(searchWidgetPlugin.length > 0){
searchWidgetPlugin[0].$emitter.subscribe(
this.options.smartSearchEventStart,
this._searchStart.bind(this)
);
searchWidgetPlugin[0].$emitter.subscribe(
this.options.smartSearchEventEnd,
this._searchEnd.bind(this)
);
}