2013-05-05 51 views
0

我有一个MXML页面具有此标签:添加<FX:声明>通过动作脚本

<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; 

我怎样才能完成的工作和验证器添加到页面?谢谢!

+2

如果执行此代码时存在'fieldTextInput',则无需执行任何操作;这将工作得很好。 mxml notation + binding的好处在于,您不必担心TextInput是否已经存在:绑定会照顾到这一点。 (注意:不存在“mxml页面”这样的事情;这不是你正在处理的HTML)。 – RIAstar 2013-05-05 13:13:30

回答

2

要UIComponent添加另一个UIComponent你可以使用的addChild()的孩子:

myComponent.addChild(myOtherUIComponent); 

然而,验证不是在UIComponent或的DisplayObject。它不会作为孩子添加到页面中。如果您只是用一个可以做同样事情的动作片段替换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内directoive:脚本块:

<fx:Script><[[ 
include "myASFile.as" 
]]></fx:Script> 

最后一种方法是非正统的,通常不建议使用。

+0

谢谢,我正在检查它! – Avi 2013-05-05 13:18:41

+0

谢谢你的扩展。我现在只是很懒惰,所以我在评论中快速写下了一些内容,而不是写出正确的答案。然后你进来为我做;)至于'包括'提示:我写了[一个案件反对它](http://stackoverflow.com/questions/14046352/using-intellij-idea-12 -for-flex-development/14047924#14047924)不久前,但+1反正;) – RIAstar 2013-05-05 14:52:13

+0

@RIAstar我这些天也懒;但这比我所避免的工作更有趣。正如我对“包含”所说的那样,它是非正统的并且不被推荐。 – JeffryHouser 2013-05-05 15:03:40