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.
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: