Warum funktioniert der folgende window.StateManager.removePlugin code nicht?

Hallo,

ich möchte gerne einige Plugins nicht nutzen und dazu wollte ich, wie von shopware empfohlen, die removePlugin Funktion des StateManagers nutzen, leider funktionieren alle Plugins nocht obowhl die die JS Datei richtig aufgerufen wird:

function destroyJQ() {

window.StateManager.removePlugin('*[data-menu-scroller="true"]', 'swMenuScroller');

window.StateManager.removePlugin('*[data-image-slider="true"]', 'swImageGallery');

window.StateManager.removePlugin('.product--image-zoom', 'swImageZoom');

}

document.onreadystatechange = function () {
if (document.readyState == "complete") {
destroyJQ();
}
if (document.readyState == "interactive") {
}
}

$.subscribe('plugin/swAjaxVariant/onRequestData', function () {
destroyJQ();
})

 

Edit: Habe folgenden Beitrag gefunden wo die destroyPlugin Funktion in Kombination mit removePlugin genutzt wird:

Bei der Lösung funktioniert es dann auch einwandfrei. Nur leider führt destroyPlugin() amgewandt auf „swImageGallery“ bei mir zu „“ TypeError: me.$template is null"

 

   window.StateManager.destroyPlugin('*[data-menu-scroller="true"]', 'swMenuScroller');
    window.StateManager.removePlugin('*[data-menu-scroller="true"]', 'swMenuScroller');
 
  // window.StateManager.destroyPlugin('*[data-image-slider="true"]', 'swImageGallery');
  // window.StateManager.removePlugin('*[data-image-slider="true"]', 'swImageGallery');

    window.StateManager.destroyPlugin('.product--image-zoom', 'swImageZoom');
    window.StateManager.removePlugin('.product--image-zoom', 'swImageZoom');

 

Würde gerne wissen warum ich" TypeError: me.$template is null" als return beim destroyen des swImageGallery Jquery Plugins bekomme. Keiner der das weiß?

@_Max_ schrieb:

Würde gerne wissen warum ich" TypeError: me.$template is null" als return beim destroyen des swImageGallery Jquery Plugins bekomme. Keiner der das weiß?

 

I am trying to do the same and having the same error in the console, could you solve this problem?

This seems to be still an issue.

The problem here is a missing condition check on me.$template within the plugin’s destroy() method. The variable is NULL until the onClick() method got called once - which won’t be the case when you try to destroy at startup.

My fast but rather ugly/inefficient fix was to use an override…

;(function ($) {
    'use strict';

    $.overridePlugin('swImageGallery', {
        destroy: function () {
            var me = this;
			
			// Fix for missing condition check on this.$template.
			me.$template = $('');
			
			// Fix for left over event listeners causing TypeError on click event.
			me._off(me._$imageContainer.find(me.opts.imageSlideSelector), 'click');
			me._off(window, 'keydown');
			
			me.superclass.destroy.apply(me, arguments);
        }
	});
})(jQuery);