2010-09-28 77 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时,虽然需要小心 - 当你更新到内线的新版本中,你需要确认你更新的覆盖默认功能。

+0

感谢您的回应,我有点做了这部分,我有听众,但我不知道如何以及在哪里扩展。有任何想法吗 ? – 2010-09-28 17:09:44

+0

请参阅更新后的答案 - 希望有所帮助。 – sdavids 2010-09-28 19:08:06

+0

请注意,在重新使用对话框窗口(使用hide/show)的情况下,窗口的FormPanel的onRender函数只会在第一次显示对话框时调用。在这种情况下,需要基于Window'show'事件的解决方案。 – 2011-01-01 16:37:40