想做一个效果:使用Ext验证textfield中数据,一旦数据有效就初始化某个模块。
试了好多 监听事件,只有“valid”事件可以,但是其验证分为好几次,我猜测可能是有首先验证表单有效性,然后验证数据有效性,即,“valid”事件监听一次,触发多次。在加载完成后,如果还存在此监听,很麻烦的,所以有必要去掉。
移除该事件使用 Ext.removeListener()方法,简写为un(un是添加监听事件on的反义词)。
添加监听Ext.on()和移除监听Ext.un(),在使用时,其第一个参数为 监听事件,第二个为要移除的在 监听事件触发的函数,第三个为 作用域(我理解就是监听的对象,一般不写或写this),需要注意的是 第二个参数 不能使用匿名函数, 需要使用函数名,要不然就不能保证操作的是同一个函数。
我当时写的例子如下:valid事件的添加和触发后移除该事件
1
|
aa = function () {Ext.getCmp( 'FinanceContractWin' ).initFormPanel();} //初始化函数 |
1
|
bb = function () {Ext.getCmp( 'payTimes' ).removeListener( 'valid' ,aa, this );} //移除valid事件函数 |
1
|
if (!Ext.getCmp( 'payTimes' ).hasListener( 'valid' )){ Ext.getCmp( 'payTimes' ).on( 'valid' ,aa, this ); } //监听到valid后调用初始化函数 |
1
|
if (Ext.getCmp( 'payTimes' ).hasListener( 'valid' )){ Ext.getCmp( 'payTimes' ).on( 'focus' ,bb, this ); } //获取焦点后移除valid监听事件 |
学习了一段时间,发现上面的方法固然可以实现前面提到的功能,在后来实践中发现可以通过在一个页面去调用另一个页面里的初始化函数,这样可以避免使用监听。
具体哪种方法更好,至今没想过,但是关于这个问题的实现方法却多了一种。
在此记录一下