使用JC组件遇到的一些问题
https://github.com/openjavascript/jquerycomps
一、数据验证Valid组件和autoFormLogic组件
1. 异步验证
第一次没有使用validitemcallback的回调,而且直接在dom元素的blur事件里使用valid(_selector)的方法,导致 了setError或setValid 方法调用 的死循环,查明原因后发现 是多调用 了valid方法。JC内置的valid对于input 的验证就是在blur事件里面。 第二去掉valid方法后,发现导步验证,未通过验证对dom元素setError之后,只要失去该元素失去焦点后,错误提示信息便消失了,原因还是blur事件后,又验证了 一次,后来的解决方法忘记了。 后来仔细看文档,发现有validitemcallback 的回调方法,异步验
证应该放到回调里边去,才算是合理的。
2. 三重验证
三重验证是指,第一重普通规则验证比如url的格式是否合法,第二重验证,比如可以添加多个url但是,url之前不能重复。第三重验证,满足前两重验证后,还需要异步验证。
这个地方,遇到的问题是当 通过 unique验证之后,第三重验证是会向服务器发多次请求。 这里的多次是指,现有的每个已经通过异步验证的dom元素,会重新向服务器发送异步验证请求,这里我用到的解决方法是给dom元素加额外属性标记,
如果它已通过异步验证,则不再向服务器发异步验证请求。
这里还是用新增加的接口 datavalid 进行异步验证。 itemvalidcallback这个接口的bug太多了。
3.submit验证后,有异步验证的dom元素会发额外的异步请求。因为表单在提交时会进行一次验证,以至表单提交后又多发了一次请求。解决方法是定义了一个全局变量,如果已通过验证,则formajaxdone的时候return。
4. 外部验证
外部验证指的是除了JC的验证规则后,还有自己额外的业务验证规则。这里需要用到formAfterProcess回调
二、AutoSelect组件
1.如果需要手工绑定当前的选中项。需要注意一点就是异步加载的数据。如果select的数据项是通过ajax请求回来的,手工绑定数据时,我用了setTimeout以防止数据尚未加载完。
手工绑数据的方法可以用update回调,也可以修改selectvalue的属性值,修改selectvalue属性值需求注意的是还需要额外指定第一级的val,然后再trigger change事件 。
2.defaultoption, 需要声明默认 option 选项, 更新option时, 有该属性的项不会被清除。