Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   ExtJS. Выбор грида из эдитора. (https://javascript.ru/forum/extjs/25752-extjs-vybor-grida-iz-ehditora.html)

biohazardo 14.02.2012 14:30

ExtJS. Выбор грида из эдитора.
 
Есть грид, к нему прикрепляется к некоторым ячейкам прикрепляется эдитор ячеек. У эдитора есть листенер на нажатие кнопки энтер. Как в функции листенера получить грид в переменную?

var grid = Ext.create('Ext.grid.Panel',{
plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
    clicksToEdit: 2,
    pluginId: 'cellplugin'
})],
columns: [
    {
    header: 'Name',
    dataIndex: 'name',
    editor: {
        xtype: 'textfield',
        listeners: {
            specialkey: function(field, e) {
                if (e.getKey() == e.ENTER) {
                    !!!NEED TO ACCESS GRID HERE, FOR EXAMPLE IN VARIABLE!!!
                    var grid = SOME?CODE?;
                }
            }
        }
    }},
    // ...
],
// ...

poorking 14.02.2012 14:35

Вот в этом коде переменная grid из первой строки будет замкнута в обработчике. То есть она уже, ее объявлять и инициализировать не надо.
А еще вроде бы в Ext у всех компонентов есть ссылка на содержащий контейнер - this.ownerCt (В 3.2 точно), так что можно добраться до грида. например var grid = this.ownerCt.ownerCt ... ownerCt;

biohazardo 14.02.2012 14:40

Цитата:

Сообщение от poorking (Сообщение 157367)
Вот в этом коде переменная grid из первой строки будет замкнута в обработчике. То есть она уже, ее объявлять и инициализировать не надо.
А еще вроде бы в Ext у всех компонентов есть ссылка на содержащий контейнер - this.ownerCt (В 3.2 точно), так что можно добраться до грида. например var grid = this.ownerCt.ownerCt ... ownerCt;

И grid, и this.ownerCt - undefined. Их нет... Это если эдитор подставить функцией, которая ему вернет редактор. Редактор один на всех, и объявлен отдельно от гридов.

poorking 14.02.2012 14:45

Очень странно что нет ссылки grid.

Вот смотрите
var o = {
    method: function () {
        alert(o);
    }
};

o.method();


o - определена, у вас точно такая же ситуация, это реальный код, точнее такой де по структуре, или вы обработчик где то в другом месте определяете?

biohazardo 14.02.2012 14:48

Цитата:

Сообщение от poorking (Сообщение 157374)
или вы обработчик где то в другом месте определяете?

Грид подключает эдитор из функции, которая находится в какой то расширенной части класса:
header:'Недостача',
                columns:[this.getQtyColumn({
                    dataIndex:'corr_q',
                    editor:this.getQtyEditor(),
                    
                }),


Класс в котором эти функции создается так: Ext.define('Base.Editors', {


Часовой пояс GMT +3, время: 02:13.