Показать сообщение отдельно
  #1 (permalink)  
Старый 05.07.2015, 13:52
Новичок на форуме
Отправить личное сообщение для Koluchiy Посмотреть профиль Найти все сообщения от Koluchiy
 
Регистрация: 05.07.2015
Сообщений: 6

Контекстное меню для 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);
                        }
                    }
                ]
            }
            ],
    });
Ответить с цитированием