通过操作脚本添加 <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>的主要内容,如果未能解决你的问题,请参考以下文章

JS动态添加JavaScript语句

第10章 DOM (2 DOM操作技术)

javaScript权威指南:跨站脚本Location和history窗口或帧的一些操作

IBM MobileFirst 通过 ant 脚本添加环境

如何通过任何代码、脚本执行以下操作

如何将外部脚本添加到 vue 组件?