Plugin-Konfiguration - Select Store per JavaScript ändern?

Hallo zusammen! Ich habe in meiner Plugin-Konfiguration einen Button der eine JavaScript-Funktion aufruft: $form-\>setElement('button', 'myGetSuggestionsButton', array( 'label' =\> ' **Liste der Vorschläge erhalten**', 'scope' =\> Shopware\Models\Config\Element::SCOPE\_SHOP, 'handler' =\> "function(btn) {" . file\_get\_contents(\_\_DIR\_\_ . "/resources/getSuggestions.js") . "}" ) ); Ebenso habe ich in meiner Konfiguration ein Select: $form-\>setElement('select', 'myCore', array( 'label' =\> 'Core', 'value' =\> 'test', 'store' =\> array( array('test', 'test'), array('shopDB', 'ShopDB') ), 'scope' =\> Shopware\Models\Config\Element::SCOPE\_SHOP, 'description' =\> 'Name des Cores', 'required' =\> true ) ); Innerhalb der JavaScript-Funktion hole ich mir nun wie folgt das Select-Feld: var core = btn.up('panel').down('[elementName=myCore]'); Um z.B. das value zu ändern, gibt es eine Funktion setValue(): core.setValue('test2'); Diese ändert zwar das value, jedoch bleibt der store unverändert. Wie kann ich nun den Bereich store manuell in der JavaScript-Funktion ändern? Eine Funktion setStore gibt es leider nicht…

Wenn core ein combobox xtype ist: core.bindStore(newStore);

1 Like

[quote=“d.coder”]Wenn core ein combobox xtype ist: core.bindStore(newStore);[/quote] Super, damit kann der Store geändert werden :thumbup: Gibt es auch eine Funktion, um diesen neuen Store Dauerhaft zu speichern? Wenn ich nämlich das Plugin im Plugin-Manager schließe und dann das Plugin neu aufrufe, habe ich wieder den Standard-Store

Eine perfekte Lösung gibt es da nicht. Du könntest den Store in einem Cookie zwischenspeichern: http://www.objis.com/formationextjs/lib … okies.html Wenn der Store nicht nur clientseitig erhalten werden soll, kannst Du auch Ajax Requests verwenden, um die Werte des Stores in einer eigenen DB Tabelle zu speichern: http://www.objis.com/formationextjs/lib … .Ajax.html Dann brauchst du entsprechend auch einen eigenen Backend Controller mit entsprechenden Actions zum Auslesen/Speichern.

Okay dann lass ich das einfach weg. Ist auch nicht so wichtig. Wenn ich nun aber mehrfach die Funktion ausführe dann bekomme ich bereits beim zweiten Mal eine Fehlermeldung in der Konsole…es gibt irgendwie Probleme mit der bindStore-Funktion: Uncaught TypeError: Cannot read property 'indexOf' of null Ext.define.indexOf @ ext-all.js:21 Ext.define.syncSelection @ ext-all.js:21 Ext.define.onListRefresh @ ext-all.js:21 Ext.util.Event.Ext.extend.fire @ ext-all.js:21 Ext.define.continueFireEvent @ ext-all.js:21 Ext.define.fireEvent @ ext-all.js:21 Ext.override.fireEvent @ ext-all.js:21 Ext.define.refresh @ ext-all.js:21 b.implement.callParent @ ext-all.js:21 Ext.define.refresh @ ext-all.js:21 b.implement.callParent @ ext-all.js:21 Ext.define.refresh @ ext-all.js:21 Ext.define.doFirstRefresh @ ext-all.js:21 Ext.define.bindStore @ ext-all.js:21 b.implement.callParent @ ext-all.js:21 Ext.define.bindStore @ ext-all.js:21 Ext.define.onBindStore @ ext-all.js:21 Ext.define.bindStore @ ext-all.js:21 (anonymous function) @ VM16013:65 j @ jquery.js:3099 k.fireWith @ jquery.js:3211 x @ jquery.js:8264 n.prop.on.c @ jquery.js:8694 n.event.dispatch @ jquery.js:4435 r.handle @ jquery.js:4121 hast du eine Idee?

Dann versuch es mal so: core.clearValue(); core.bindStore(null); core.bindStore(newStore, true);

1 Like

[quote=“d.coder”]Dann versuch es mal so: core.clearValue(); core.bindStore(null); core.bindStore(newStore, true);[/quote] Ich bedanke mich! Auch diese Lösung funktioniert wie gewünscht.