Сфокусировать строку редактируемой сетки в форме

У меня есть редактируемая сетка (Ext.grid.plugin.RowEditing) Сетка находится в форме. Форма отображается в окне

Поскольку форма отображается в окне, я хочу сосредоточиться на первом столбце первой редактируемой строки.

Это метод, вызываемый для события 'show' окна.

onWinShow : function (window, options) {

    var grid = this.down ('#myGrid');
    // focus on first field
    var rowEditStore = grid.getStore ();
    var rowEditor = grid.getPlugin ('rowEditplugin');

    rowEditor.cancelEdit ();

    var r = rowEditStore.getAt (0);
    rowEditor.startEdit (r, 1);
},

Я проверил источник RowEditing и RowEditor, в котором есть логика для фокусировки поля. Я вижу, как фокус появляется на мгновение, а затем исчезает. После этого ни одно поле в форме не сфокусировано.

Пожалуйста, предложите, где я ошибся.

Спасибо


person sharathchandra.ck    schedule 22.08.2012    source источник


Ответы (1)


Окно в Extjs имеет свойство defaultFocus, которое позволяет вам установить, какой компонент должен иметь фокус при открытии окна.

Если это свойство не работает для ваших нужд, я бы порекомендовал инкапсулировать вашу текущую функцию фокуса в методе Ext.Function.defer, подобном этому, и вам нужно будет увидеть, сколько миллисекунд вам нужно (протестируйте свой самый медленный целевой браузер или сделайте браузер задержки зависит), это просто сделает ваш фокус после того, как фокус окна по умолчанию будет выполнен:

onWinShow : function (window, options) {
    Ext.Function.defer(function (window, options) {

        var grid = this.down ('#myGrid');
        // focus on first field
        var rowEditStore = grid.getStore ();
        var rowEditor = grid.getPlugin ('rowEditplugin');

        rowEditor.cancelEdit ();

        var r = rowEditStore.getAt (0);
        rowEditor.startEdit (r, 1);
    }, 500, this);
}
person Reimius    schedule 22.08.2012