Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Ext.form.field.Text событие в controller (https://javascript.ru/forum/extjs/58076-ext-form-field-text-sobytie-v-controller.html)

potkin 03.09.2015 12:55

Ext.form.field.Text событие в controller
 
ExtJS 6 ругается на xtype: "trigger", мол уже устарел и используйте вот это:
Ext.create('Ext.form.field.Text', {
    triggers: {
        foo: {
            cls: 'my-foo-trigger'
        }
    },
    fieldLabel: "xxx", name: 'yyy,
    
    itemId: "ValueXXX",
    onTriggerClick: function (e) { this.fireEvent("ontriggerclick", this, event); }
})

Раньше в контроллере, для xtype: "trigger", ловил событие по itemId и onTriggerClick так:
init: function () {
    this.control({
        'viewXXX #ValueXXX': { "ontriggerclick": this.onMyFunction },
    });
},

onMyFunction : function (...) {
}

А теперь не срабатывает перехват событий.
Может кто в курсе как перехватить событие для Ext.form.field.Text (cls: 'my-foo-trigger') ???

potkin 03.09.2015 15:33

Надо было в handler добавить fireEvent
View:
triggers: {
    foo: {
        cls: 'my-foo-trigger',
        handler: function () {
            console.log('foo');
            this.fireEvent("ontriggerclick", this, event);
        },
    }
}

Controller:
init: function () {
    this.control({
        'viewSysDirConstantsEditDir #SysDirConstantsValue': { "ontriggerclick": this.onTriggerGroupSubNameClick },
    });
},

novikov 06.09.2015 11:39

Рекомендую оставить прежние контроллеры для общесистемных действий и перейти на ViewController. Такие контроллеры создаются и уничтожаются вместе с представлениями.

Тогда достаточно написать:

View (определение поля в форме)

{
    xtype: 'textfield',
    reference: 'my-textfield',
    triggers: {
        foo: {
            cls: 'my-foo-trigger',
            handler: 'onTriggerClick'
        }
    }
}


документация

ViewController

{
    extend: 'Ext.app.ViewController',
    onTriggerClick: function() {
        var view = this.getView();
        var myTextField = this.lookupReference('my-textfield');
    }
}


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