В ExtJS, как внедрить enableKeyEvents = true в компонент? - PullRequest
2 голосов
/ 10 мая 2011

Это мой код,

myText.enableKeyEvents = true; // **
myText.on('keyup', function(t){ console.log(t.getValue()); });

Это не работает, я думаю, что у него может быть метод вызова.
У кого-нибудь есть идея?


Полный код

// function
var txfJump = function(txf){
    var next = txf.nextSibling();
    if(next.xtype == 'textfield'){
        txf.enableKeyEvents = true;
        txf.on('keyup', function(t, e){
            if(t.getValue().length == t.maxLength){
                next.focus();
            }
        });
        txfJump(next);
    }
};
// form
var p = new Ext.Panel({
    title   : 'test panel',
    width   : 400,
    defaults: {
        xtype : 'textfield',
    },
    items   : [
        { ref : 'one',  maxLength : 5 },
        { ref : 'two',  maxLength : 5 },
        { ref : 'three',maxLength : 5 },
        {
            xtype   : 'button',
            text    : 'SAMPLE'
        },
        { ref : 'four', maxLength : 5 },
    ],
    renderTo: Ext.getBody()
});

Ext.onReady(function(){
    txfJump(p.one);
});

Ответы [ 3 ]

4 голосов
/ 09 июня 2011

Это невозможно без хакерских уловок . Прочитав источник TextField, я обнаружил, что существует закрытый метод initEvents, который устанавливает обратные вызовы для html-элементов тогда и только тогда, когда установлен enableKeyEvents. Таким образом, изменение enableKeyEvents после вызова initEvents не имеет никакого эффекта, пока оно не будет вызвано снова.

Чтобы внедрить его, можно попытаться запустить повторную визуализацию компонента или скопировать поведение соответствующих частей TextField initEvent. Но официального пути, похоже, не существует.

2 голосов
/ 26 октября 2012

вам нужно позвонить txf.initEvents(), это нужно вызвать после txf.enableKeyEvents = true;

var txfJump = function(txf){
var next = txf.nextSibling();
if(next.xtype == 'textfield'){
    txf.enableKeyEvents = true;
    txf.initEvents();            //<----- this is what you have missing
    txf.on('keyup', function(t, e){
        if(t.getValue().length == t.maxLength){
            next.focus();
        }
    });
    txfJump(next);
}
1 голос
/ 10 мая 2011

Вы должны передать «enableKeyEvents»: true при получении нового экземпляра Ext.form.TextField.Вот пример использования

var textField = new Ext.form.TextField({
    . // your configs
    .
    enableKeyEvents: true,
    .
    .
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...