通过操作脚本添加 <fx:Declarations>
Posted
技术标签:
【中文标题】通过操作脚本添加 <fx:Declarations>【英文标题】:Adding <fx:Declarations> via action script 【发布时间】:2013-04-29 09:02:44 【问题描述】:我有一个带有这个标签的 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;
如何完成工作并将验证器添加到页面?谢谢!
【问题讨论】:
如果在这段代码执行时fieldTextInput
已经存在,那么就没有什么可做的了;这会很好用。 mxml 表示法+绑定的优点是您不必担心 TextInput 是否已经存在:绑定会处理这个问题。 (附带说明:没有“mxml 页面”之类的东西;这不是您要处理的 html)。
【参考方案1】:
要将 UIComponent 添加为另一个 UIComponent 的子组件,您可以使用 addChild():
myComponent.addChild(myOtherUIComponent);
但是,验证器不是 UIComponent 或 DisplayObject。它不会作为子项添加到页面中。如果您只是将 MXML 文件的 fx:Declaration
片段替换为执行相同操作的 ActionScript 片段,那么您无需做更多的事情。
我会将 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;
最后;如果您只想将该 sn-p 移动到不是类的 ActionScript 文件中;您可以在 fx:Script 块中使用 include 指令:
<fx:Script><[[
include "myASFile.as"
]]></fx:Script>
最后一种方法是非正统的,通常不推荐。
【讨论】:
谢谢,我正在检查! 感谢您扩展我的想法。这些天我太懒了,我很快在评论中记下了一些东西,而不是写一个正确的答案。然后你进来为我做;)至于“包含”提示:我不久前写过a case against it,但无论如何+1;) @RIAstar 这几天我也很懒;但这比我避免的工作更有趣。正如我所说的“包含”是非正统的,不推荐。以上是关于通过操作脚本添加 <fx:Declarations>的主要内容,如果未能解决你的问题,请参考以下文章