通过动作脚本添加<fx:declarations> </fx:declarations>

时间:2013-05-05 12:44:30

标签: flex actionscript mxml

我有一个包含此标记的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;

如何完成工作并将验证器添加到页面?谢谢!

1 个答案:

答案 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>

最后一种方法是非正统的,通常不推荐。