Ste*_*gle 3 apache-flex components mxml flex3
让我们说我有一个Flex 3 mxml组件,称之为A. A有一个名为'b'的get/set属性.在AI中有另一个内部组件C,使用mxml指定.当在mxml中"实例化"组件A时,我可以在声明时指定b的值,一切正常.但是,当我使用Actionscript初始化组件时,我必须先将组件添加到渲染容器中,然后才能设置所述组件的属性(在本例中为"b").当属性'b'的setter以某种方式访问A中的C时会发生这种情况.
所以,这在运行时失败了(它说C是null)......
var a:A = new A();
a.b = "woopy"; //Sets the Label (declared in mxml) withn A to "woopy"
this.addChild(a);
Run Code Online (Sandbox Code Playgroud)
另一方面,以下任何一种都可行
<customNamespace:A b="woopy"/>
Run Code Online (Sandbox Code Playgroud)
要么
var a:A = new A();
this.addChild(a);
a.b = "woopy"; //Sets the Label (declared in mxml) withn A to "woopy"
Run Code Online (Sandbox Code Playgroud)
如图所示,在将组件添加到容器后设置属性时,不会引发运行时错误消息.好吧,这是有道理的,我想在组件添加到容器之前,实际上并没有创建组件的内部.不过,这有点烦人.有没有办法保证组件内部完全呈现而不将其添加到容器中?当我使用actionscript vs mxml时,我不喜欢它的感觉.我想要一个解决方案,以便基本上在没有属性"arguments"的mxml中声明A等同于在AS中使用new运算符声明A. 至少,就A的内部状态而言.
要强制控件创建其子控件,您必须调用initialize方法.
即这应该工作:
var a:A = new A();
a.initialize();
a.b = "woopy";
this.addChild(a);
Run Code Online (Sandbox Code Playgroud)
但是,在声明mxml控件时我到目前为止所做的是将内部控件绑定到脚本块中声明的公共变量.例如
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
[Bindable]
public var labelText:String = "[Default]";
]]>
</mx:Script>
<mx:Label text="{labelText}"/>
</mx:Canvas>
Run Code Online (Sandbox Code Playgroud)
这样您就可以设置参数,而无需担心控件是否已创建.
归档时间: |
|
查看次数: |
5247 次 |
最近记录: |