Shopware.progress.Window Problem

Hallo, ich hab ein Frage bezüglich der Shopware.progress.Window Komponente. Ich habe einige Aktionen die ich im Progress Window abhandeln möchte. Bis zu dem letzten Commit https://github.com/shopware/shopware/bl … rogress.js hat dies auch alles bei mir funktioniert. Jetzt steh ich vor dem Problem das ich die neuen Gegenbenheiten an mein Plugin anpassen muss. Der Event des Progress Fensters wird nämlich jetzt global gefeuert und meine vorherige Implementierung funktioniert so nicht mehr. Ich hab dann das ganze geändert und hab mich mittels der folgenden Funktion in den Event eingeklinkt Shopware.app.Application.on('verify-items-process', function(task, record, callback) { me.onVerifyItemsProcess(task, record, callback); }); Der Event wird auch korrekt abgefangen und abgehandelt durch die Funktion. Jedoch ist jetzt das Problem, wenn ich das Fenster schliesse und wieder öffne, dann den Batch Prozess starte, das 2 mal der Listener den Prozess ansteuert. Wenn ich das Fenster schliesse und ein 3 mal wieder öffne. Wird jede Funktion 3 mal ausgeführt. Mir ist das Problem klar das bei jedem öffnen ein neuer Listener erzeugt und angehangen wird. Gibt es eine Möglichkeit das verhalten zu unterbinden? Ein paar Infos zur Implementierung. Ich hab nicht vom Shopware.grid.Controller abgeleitet, sondern 2 eigene Controller erstellt. Main und Batch. Der Main Controller hat einen Listener der über einen Button den Event auslöst. In meinem Fall wird dann diese Funktion ausgeführt. me.getController('Batch').createProgressWindow(event,grid,opts); Die createProgressWindow Funktion sieht so aus. createProgressWindow:function(event, grid, opts){ var me = this, window, config = { }; var selectionModel = grid.getSelectionModel(), records = selectionModel.getSelection(); if (!event) { me.throwException("Component requires the `event` property"); } if (!grid) { me.throwException("Component requires the `grid` property"); } if (records.length \> 0) { config = { infoText: me.snippets.progressBarInfoText, subApp: me.subApplication, tasks: [{ text: me.snippets.progressBarText, event: event, totalCount: records.length, data: records }] }; // Check opts for configurations if(opts != null){ Ext.Object.merge(config.tasks, config.tasks, opts.tasks); } window = Ext.create('Shopware.window.Progress', { title:me.snippets.title, startTimeFrom: new Date(), configure: function() { return config; } }); Shopware.app.Application.on('grid-process-done', function() { me.onGetList(window.startTimeFrom); }, me, { single: true }); window.show(); } }, Das progress Window wird korrekt geöffnet und feuert den übergebenen Event. Ich habe im Batch Controller in der init Funktion eine Methode die sich createListener nennt, die die ganzen Events enthält auf die gehört werden soll. Auch das funktioniert ohne Probleme. Batch Controller createListeners:function(){ var me = this; Shopware.app.Application.on('verify-items-process', function(task, record, callback) { me.onVerifyItemsProcess(task, record, callback); }); .... }); Habt ihr eine Idee wie ich das besagt verhalten unterbinden kann oder einen Tipp wo mein eigentliches Problem liegt, das dieses Verhalten erklärt. Gruß Frank

Die letzte Version des progress windows war leider fehlerhaft und unzuverlässig - ist dir das nie aufgefallen? Das progress window feuert zb dein event nicht mehr, sobald du die Medienverwaltung öffnest oder den cache leerst (siehe http://jira.shopware.de/?ticket=SW-11134). Der aktuellste commit bringt leider neue Fehler mit sich… Ich kann dir leider keine Lösung bieten, sondern aus eigener Erfahrung nur empfehlen: Finger weg und ein eigenes progress window schreiben. Viele Grüße

1 „Gefällt mir“

Danke für deine schnelle Antwort. Ich hate mir sowas in der Art schon gedacht. In meiner letzten Version hat ich ein override auf das Shopware.window.Progress. Jetzt werd ich eines selber implementieren um zukünftigen Probblemen aus dem Weg zu gehen. Vielen Dank