我有一个包含此标记的mxml页面:
<fx:Declarations>
<mx:StringValidator id = "validator"
source = "{myTextInput}"
property = "text"
required = "true"
maxLength = "128"/>
<fx:Declarations>
我想在另一个页面中执行相同操作,但使用操作脚本动态构建和添加验证程序。我有用于构建验证器的代码:
var lengthTextValidator:StringValidator = new StringValidator();
lengthTextValidator.source = fieldTextInput;
lengthTextValidator.property = "text";
lengthTextValidator.required = true;
如何完成工作并将验证器添加到页面?谢谢!
答案 0 :(得分:2)
要将UIComponent添加为另一个UIComponent的子级,您可以使用addChild():
myComponent.addChild(myOtherUIComponent);
但是,验证程序不是UIComponent或DisplayObject。它不会作为孩子添加到页面中。如果您只是使用同样的ActionScript片段替换MXML文件的fx:Declaration
片段,那么您不必再做更多的事情。
我会将lengthTextValidator设为组件上的公共或受保护的实例变量:
public var lengthTextValidator:StringValidator = new StringValidator();
这意味着变量将在组件中使用。没有public或private的原始语法将生成特定于方法的变量,该方法在执行方法时将无法访问,或者将变量放在内部命名空间中。
您的其余代码必须使用方法。对于ActionScript类;你可以把它放在构造函数中。或者对于MXML类,您可以将其放在initialize或creationComplete事件处理程序中。
lengthTextValidator.source = fieldTextInput;
lengthTextValidator.property = "text";
lengthTextValidator.required = true;
如果要将验证器代码放在单独的类中;那么你将必须导入该类并创建它的实例:
import myPackage.MyClass;
public var myClass :MyClass = new MyClass();
然后,您可以通过访问组件上的公共变量来访问验证器:
myClass.lengthTextValidator;
最后;如果您只想将该代码段移动到不是类的ActionScript文件中;你可以在fx:Script块中使用include directoive:
<fx:Script><[[
include "myASFile.as"
]]></fx:Script>
最后一种方法是非正统的,通常不推荐。