AS3虽然自带很多种类的validator,但是对于我们来说功能还是太少了.所以这时候不可避免就是要重写这个类,写出适合自己的validator类。
首先,假设有一个textinput,id名为userInput;一个button,id名为submit_Btn。例如以下代码:
<
mx:TextInput
id
="selUser"
width
="100%"
/>
< mx:Button id ="bt_submit" />
< mx:Button id ="bt_submit" />
新建一个floder,用于存放即将新建的class,新建一个personValidator的AS3 class文件
public
class
personValidator
extends
Validator
... {
private var results:Array;
//构造方法继承父类
public function personValidator()
...{
super();
}
//重写doValidation方法,在其内可以写入自己想要的规则,很明显这里是根据select再判断具体person的情况
override protected function doValidation(value:Object):Array
...{
var person:String = String(value.person);
var select : Boolean = Boolean(value.select);
//clear the array
results = ;
//首先做一下父类的方法
results = super.doValidation(value);
if(results.length>0)
...{
return results;
}
//这里开始就是你自己的方法了
if(select)
...{
if(person == "" || person == null)
...{
results.push(new ValidationResult(true, "person", "noPersonName",
"輸入框内不能為空."));
return results;
}
}
return results;
}
}
... {
private var results:Array;
//构造方法继承父类
public function personValidator()
...{
super();
}
//重写doValidation方法,在其内可以写入自己想要的规则,很明显这里是根据select再判断具体person的情况
override protected function doValidation(value:Object):Array
...{
var person:String = String(value.person);
var select : Boolean = Boolean(value.select);
//clear the array
results = ;
//首先做一下父类的方法
results = super.doValidation(value);
if(results.length>0)
...{
return results;
}
//这里开始就是你自己的方法了
if(select)
...{
if(person == "" || person == null)
...{
results.push(new ValidationResult(true, "person", "noPersonName",
"輸入框内不能為空."));
return results;
}
}
return results;
}
}
保存后,到前台页面文件中,添加此类,如:
<
mx:Model
id
="selectUserXml"
>
< types >
< type >
< person > {selUser.text} </ person >
< select > {toParameter.selected} </ select >
</ type >
</ types >
</ mx:Model >
< model:personValidator id ="perVal" source ="{selectUserXml}" property ="type"
trigger ="{bt_submit}" triggerEvent ="click" listener ="{selUser}"
valid ="setNextOwnerResult()" />
< types >
< type >
< person > {selUser.text} </ person >
< select > {toParameter.selected} </ select >
</ type >
</ types >
</ mx:Model >
< model:personValidator id ="perVal" source ="{selectUserXml}" property ="type"
trigger ="{bt_submit}" triggerEvent ="click" listener ="{selUser}"
valid ="setNextOwnerResult()" />
source:绑定的数据源,property:数据源中的节点名称,trigger:触发此validator的组件,triggerEvent:组件的事件,listener:此validator所监视的组件,valid:验证通过后执行的方法。
上面建立的model为一个保存数据的XML最后传入validator的value,当然你可以采取其他方式来保存。