前些天,由于项目功能需要。尝试使用Coolite控件的自定义验证,VType,我项目的开发环境是VS2005+MySql,使用的是Coolite 0.8。在网上查到一些关于Ext的自定义验证使用的方法,不过在我的项目中遇到一些问题,具体情况如下:
看到网上的朋友们在使用VType进行自定义验证的时候都如:http://www.cnblogs.com/DNNCenter/archive/2009/08/08/1542018.html
处理的(详情请见这个链接,就不详细写了)
而我项目中遇到的问题:
问题1.
直接写Ext.apply(Ext.form.VTypes, {
.......
}
运行时报错:Ext未定义。
解决办法
建一JS方法
然后在form中调用:
问题2.
在自定义这个验证中如果使用Ajax.Methods.xxxx的Ajax方式在服务端进行验证,而客户端始终接收到服务端的验证结果有问题,我仔细跟踪过,即使服务端返回结果为true,同时我已经将true赋值给了客户端的isValid(该值纪录验证结果),但到后面代码中,isValid的值依然变“”了,简单思考了一下,这个问题出现的原因可能与AjaxMethod方法调用可能有一个响应延迟,但是不是这个原因造成的就不清楚了。因为时间原因,则另外想了一个烂招数来解决这个问题
解决办法:
在页面放置了一个coolite的Hidden控件,用这个控件来纪录服务端验证结果,而Ajax.Methods.xxxxx方法执行完成后,在客户端取得Hidden控件中的值,用该值来确定是否验证通过。例:
由于项目进度催得紧。暂时没有深究这两个问题出现的原因。暂且纪录这两个问题及目前的解决办法,后面再来仔细研究!
2010-9-9号补充:
这两天又想了一下这个问题,估计出大概原因是因为,使用Coolite的控件开发不同用直接使用ExtJs,自定义扩展验证代码直接放在Header中不行的原因可能是由于还没有初始化控件(指具体使用这个自定义验证的Coolite控件),但就来调用Ext.Apply......,所以导致出错。所以,如果直接将Ext.apply........的自定义扩展代码写到页面的<body>部分就OK了,而不用像上面这样绕个圈子!