Контекстное меню для 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, время: 23:24. |