Coolite自定义验证,VType

    前些天,由于项目功能需要。尝试使用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方法

  function InitializeExtFormVTypes() { Ext.apply(Ext.form.VTypes,{ repetition: function (val,field) { var isValid=""; Coolite.AjaxMethods.ValidMaterilaIdPrefix(val, { success:function(result){ isValid=result; }, failure:function(errorMsg) { Ext.Msg.alert('失败',errorMsg); } }); if (isValid == 'true') {return true; } else { return false; } }, repetitionText:'注意,物料序号的前缀是物资分类号,系统中不存在这个分类,请先创建该分类!' }) }  

然后在form中调用:

 <mce:script type="text/javascript"><!-- InitializeExtFormVTypes(); // --></mce:script>     

问题2.

在自定义这个验证中如果使用Ajax.Methods.xxxx的Ajax方式在服务端进行验证,而客户端始终接收到服务端的验证结果有问题,我仔细跟踪过,即使服务端返回结果为true,同时我已经将true赋值给了客户端的isValid(该值纪录验证结果),但到后面代码中,isValid的值依然变“”了,简单思考了一下,这个问题出现的原因可能与AjaxMethod方法调用可能有一个响应延迟,但是不是这个原因造成的就不清楚了。因为时间原因,则另外想了一个烂招数来解决这个问题

 

解决办法:

在页面放置了一个coolite的Hidden控件,用这个控件来纪录服务端验证结果,而Ajax.Methods.xxxxx方法执行完成后,在客户端取得Hidden控件中的值,用该值来确定是否验证通过。例: 

[AjaxMethod] public void ValidMaterilaIdPrefix(string typeId) { MaterialTypeInfo info = new MaterialTypeInfo(); MaterialTypeEntity o = info.GetSingleMaterialTypeByTypeId(typeId); if (o != null) { H_IsValid.Value = "true"; this.materialTypeCombox.SetSelectedItem(o.Id, o.Name); } else { H_IsValid.Value = "false"; } }  

function InitializeExtFormVTypes() { Ext.apply(Ext.form.VTypes,{ repetition: function (val,field) { Coolite.AjaxMethods.ValidMaterilaIdPrefix(val, { failure:function(errorMsg) { Ext.Msg.alert('失败',errorMsg); } }); var isValid=Ext.getCmp("H_IsValid").value; if (isValid == 'true') {return true; } else { return false; } }, repetitionText:'注意,物料序号的前缀是物资分类号,系统中不存在这个分类,请先创建该分类!' }) }

 

由于项目进度催得紧。暂时没有深究这两个问题出现的原因。暂且纪录这两个问题及目前的解决办法,后面再来仔细研究!

 

2010-9-9号补充:

 

这两天又想了一下这个问题,估计出大概原因是因为,使用Coolite的控件开发不同用直接使用ExtJs,自定义扩展验证代码直接放在Header中不行的原因可能是由于还没有初始化控件(指具体使用这个自定义验证的Coolite控件),但就来调用Ext.Apply......,所以导致出错。所以,如果直接将Ext.apply........的自定义扩展代码写到页面的<body>部分就OK了,而不用像上面这样绕个圈子!

你可能感兴趣的:(Coolite自定义验证,VType)