Контекстное меню для Ext.grid.Panel
Здравствуйте уважаемые форумчане. Две недели назад начал изучать ExtJS и активно пользовался этим форумом. Появился вопрос, надеюсь сможете просветить меня. У меня есть grid.Panel в которой я использую плагин rowediting (встроенный) и плагин viewcontextmenu (написанный). В плагине viewcontextmenu я создаю новый элемент в grid.Panel и хочу, что бы он сразу был доступен для редактирования с помощью плагина rowediting, вот только загвоздка в том как его вызвать...
Код: viewcontextmenu: Ext.define('MyFirstApplication.ViewContextMenu', { extend: 'Ext.AbstractPlugin', alias: 'plugin.viewcontextmenu', init: function () { if (this.menu) { if (!(this.menu instanceof Ext.menu.Menu)) { this.menu = this.buildMenu(this.menu); } this.cmp.on({ scope: this, itemcontextmenu: this.onItemContextMenu }); } }, buildMenu: function (menuCfg) { if (Ext.isArray(menuCfg)) { menuCfg = { items: menuCfg }; } return Ext.create('Ext.menu.Menu', menuCfg); }, onItemContextMenu: function (view, model, row, index, evt) { evt.stopEvent(); this.menu.showAt(evt.getXY()); }, destroy: function () { if (this.menu && this.menu.destroy) { this.menu.destroy(); } } }); Код: grid.Panel: Ext.define('MyFirstApplication.EmployeeGrid', { extend: 'Ext.grid.Panel', alias: 'widget.employeegrid', title: 'Список работников', store: Ext.create('MyFirstApplication.EmployeeStore', { storeId: 'employeestore' }), loadMask: true, selType: 'rowmodel', viewConfig: { forceFit: true }, columns: [{ text: 'Имя', dataIndex: 'firstName', editor: { xtype: 'textfield', allowBlank: false } }, { text: 'Фамилия', dataIndex: 'lastName', editor: { xtype: 'textfield', allowBlank: false } }, { text: 'Email', dataIndex: 'email', flex: 1, editor: { xtype: 'textfield', allowBlank: false } }], plugins: [{ ptype: 'rowediting', clicksToEdit: 2, autoCancel: false }, { ptype: 'viewcontextmenu', menu: [ { text: 'Добавить', handler: function (menuItem) { var grid = Ext.ComponentQuery.query('grid')[0]; var selected = grid.selModel.getSelection(); console.log(menuItem.ownerCt.ownerCt); console.log(menuItem); //тут необходимо получить ссылку на плагин 'rowediting' //для вызова метода .cancelEdit(); var newEmployee = Ext.create("MyFirstApplication.EmployeeModel"); Ext.getStore('employeestore').insert(selected[0].id, newEmployee); //тут необходимо получить ссылку на плагин 'rowediting' //для вызова метода .startEdit(selected[0].id, 0); } } ] } ], }); |
Написать плагин самому вероятнее всего интересно, но что касается контекстного меню - все давно придумано. Вот, почитайте. Там, кстати есть и ответ на вопрос про запуск плагина из контекстного меню.
https://www.sencha.com/forum/showthread.php?291022 |
Спасибо большое!
|
Часовой пояс GMT +3, время: 20:17. |