2010-09-28 4 views
0

Я использую ExtJS 3.0, и я хотел бы расширить FormPanel или любое решение, чтобы каждый раз, когда я показывал форму, первое поле должно фокусироваться. Я думал о добавлении глобального слушателя (если таковой существует), например, такого:ExtJS добавить глобальный слушатель FormPanel или решение

afterrender: function() { 
Ext.getCmp('formAddProgPaymentDoc').findByType('textfield')[0].focus(); //// Get the first textfield and focus it 
} 

Это можно сделать? У меня более 40 форм, и я не хочу, чтобы каждый из них слушал, я хотел бы получить его слушателя автоматически для каждого из них.

Спасибо.

ответ

1

Создайте файл ExtOverrides.js, который изменит базовую функциональность Ext. И добавьте следующий код:

Ext.override(Ext.FormPanel, { 
    onRender: function(ct, position){ 
     this.initFields(); 
     Ext.FormPanel.superclass.onRender.call(this, ct, position); 
     this.form.initEl(this.body); 

     //Begin edit of default functionality 
     var firstFieldItem = this.getForm().items.first(); 
     if(firstFieldItem){ 
      //delay the focus for 500ms to make sure the field is visible 
      firstFieldItem.focus(true,500); 
     } 
     //End edit of default functionality 
    } 
}) 

Вы должны быть осторожны при использовании ExtOverrides, хотя - при обновлении до новой версии Ext вы должны убедиться, что обновлять функциональность по умолчанию в переопределении.

+0

Спасибо за ответ, я как бы сделал эту часть, у меня есть слушатель, но я не знаю, как и где продлить. Есть идеи ? –

+0

См. Обновленный ответ - надеюсь, что это поможет. – sdavids

+0

Остерегайтесь того, что в необычной ситуации повторного использования диалогового окна Window (с помощью hide/show) функция onRender WindowPanel Window будет вызываться только при первом отображении диалога. В этой ситуации требуется решение, основанное на событии 'show' окна. –

Смежные вопросы