Здравствуйте уважаемые форумчане. Две недели назад начал изучать 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);
}
}
]
}
],
});