extjs - wie selected items abfragen?

hallo. versuche mich grade an der backend programmierung. dabei hangel ich mir durch die turials. http://wiki.shopware.de/Backend_cat_871.html nun habe ich meine main.js Ext.define('Shopware.apps.SwagProduct.controller.Main', { extend: 'Enlight.app.Controller', init: function() { var me = this; me.control({ 'product-listing-grid': { 'change-products': me.onAssignCategories } }); me.mainWindow = me.getView('list.Window').create({ }).show(); }, onAssignCategories: function () { Ext.Ajax.request({ url: '{url controller=SwagProduct action=assignCategoriesProducts}', method: 'POST', params: { productId: 1 }, success: function(response, operation) { alert('all done'); } }); }, }); Ext.define('Shopware.apps.SwagProduct.view.list.Product', { extend: 'Shopware.grid.Panel', alias: 'widget.product-listing-grid', region: 'center', //grid.getSelectionModel().getSelection(); configure: function() { return { detailWindow: 'Shopware.apps.SwagProduct.view.detail.Window' }; }, createToolbarItems: function() { var me = this, items = me.callParent(arguments); items = Ext.Array.insert(items, 2, [me.createToolbarButton()] ); return items; }, createToolbarButton: function() { var me = this; // Shopware.grid.Panel.getSelectionModel().getSelection(); return Ext.create('Ext.button.Button', { text: 'Produkte ändern', handler: function() { me.fireEvent('change-products', me); } }); } }); und würde gerne die checkboxen abfragen und die dazugehörigen id’s in der onAssignCategories verwenden. da wo im moment productId: 1 steht.kann mir jemand einen kleinen tip geben, wie ich auf die checkboxen abfrage? grid.getSelectionModel().getSelection(); aber ich weiss nicht woher ich grid in meinem ansatz referenziere… extjs anfänger halt. :wink:

Hallo scuba303, du hast mehrere Möglichkeiten an das Grid zu kommen. Zum Einen könntest du bspw. beim Aufruf deines Events change-products das Grid als Parameter übergeben. D.h. du zündest irgendwo me.fireEvent('change-products', aaa, bbb); aaa und bbb können dann eigene Parameter sein. Diese kannst du anschließend in deinem Controller in der entsprechenden Methode abfangen: onAssignCategories: function (aaa, bbb) { {...} Ein weiterer Weg wäre eine Referenz. Diese definierst du am Anfang deines Controllers, bspw. so: refs:[{ ref:'myGrid', selector:'der-alias-des-grids' }] Du gibst also eine Art “Name” an und einen Selektor. Der Selektor kann einfach der Alias des Grids sein, also in diesem Fall bspw. alias: ‘widget.der-alias-des-grids’,. Anschließend bekommst du das Grid über me.getMyGrid(), entsprechend dem Namen der Referenz. Ich hoffe das ist einigermaßen verständlich erklärt. Gruß, Patrick :shopware:

cool… danke, glaube, dass hilft mir ein stück weiter!

hmm… so ganz kriege ich es nicht hin. habe versucht den weg über ref zu gehen. Ext.define('Shopware.apps.SwagProduct.controller.Main', { extend: 'Enlight.app.Controller', refs:[{ ref:'myGrid', selector:'widget.product-listing-grid' }], beim initalen aufruf des grids kommt dann bei onAssignCategories: function (me) { console.log( me.getMyGrid()); schon undefined. bin ich da völlig auf dem falschen dampfer? also die ref muss doch in den teil m,it rein, oder? hier noch mal das „gesamtkunstwerk“ Ext.define('Shopware.apps.SwagProduct.controller.Main', { extend: 'Enlight.app.Controller', refs:[{ ref:'myGrid', selector:'widget.product-listing-grid' }], init: function() { var me = this; me.control({ 'product-listing-grid': { 'change-products': me.onAssignCategories(me) } }); me.mainWindow = me.getView('list.Window').create({ }).show(); }, onAssignCategories: function (me) { console.log( me.getMyGrid()); Ext.Ajax.request({ url: '{url controller=SwagProduct action=assignCategoriesProducts}', method: 'POST', params: { productId: 1 }, success: function(response, operation) { } }); }, }); Ext.define('Shopware.apps.SwagProduct.view.list.Product', { extend: 'Shopware.grid.Panel', alias: 'widget.product-listing-grid', region: 'center', //grid.getSelectionModel().getSelection(); configure: function() { return { detailWindow: 'Shopware.apps.SwagProduct.view.detail.Window' }; }, createActionColumnItems: function () { var me = this, items = me.callParent(arguments); items.push({ action: 'notice', iconCls: 'sprite-balloon', handler: function (view, rowIndex, colIndex, item, opts, record) { Shopware.Notification.createGrowlMessage(undefined, 'do some stuff in grid panel'); } }); return items; }, createToolbarItems: function() { var me = this, items = me.callParent(arguments); items = Ext.Array.insert(items, 2, [me.createToolbarButton()] ); return items; }, createToolbarButton: function() { var me = this; //console.log(Shopware.apps.SwagProduct.view.list.Product.Panel.getSelectionModel().getSelection()); return Ext.create('Ext.button.Button', { text: 'Produkte ändern', handler: function() { me.fireEvent('change-products', me); } }); } });

Hallo scuba303, du darfst den Teil „widget.“ nicht in den Selektor übernehmen. Versuch’ es stattdessen einmal so: refs:[{ ref:'myGrid', selector:'product-listing-grid' }], Dort habe ich lediglich den o.g. String „widget“ und den Punkt entfernt. Dann sollte es bereits funktionieren. Gruß, Patrick :shopware: