找出某个容器中的所有子项-关于childDescriptors和ComponentDescripto


每个容器都有一个childDescriptors属性,可以从中取得这个容器中的所有子项,包括其属性等
childDescriptors:Array []
由 MXML 编译器生成的 UIComponentDescriptor 对象的 Array。每个 UIComponentDescriptor 对象都包含在容器的 MXML 标签的某个子 MXML 标签中指定的信息。Array 中 UIComponentDescriptor 对象的顺序与子标签的顺序相同。在初始化期间,子描述符用于创建容器的子 UIComponent 对象及其 Repeater 对象,并赋予它们在 MXML 中指定的初始属性值、事件处理程序、效果等


FLEX TIP-关于childDescriptors和ComponentDescriptor
最近在制作一个程序的时候,需要得到一个功能:就是希望知道在一个Panel里面,一级的组件有几个?然后我需要知道每个组件的一些状况?于是乎,我就用了N多种复杂的方法去测试,花费了我很多时间。
FLEX, 其实FLEX好就好在开发效率高,就像我所需要的功能,其实FLEX里面就已经有很简单的方法可以去实现,这就是childDescriptors和 ComponentDescriptor,按照英文字面的意思,就是子描述与组件描诉。通过这个组合拳,我就可以知道,在一个大组件下,下面的一级组件的 属性和内容。那如何做?
先来一段简单的代码,我首先设置好一个大PANEL

<mx:Panel id=”pa” width=”80%” height=”50%”>
<mx:Button label=”Click” click=”done()”/>
<mx:Text id=”txf” text=”Hello form uncool”/>
<mx:Label text=”Leno is a good guy!” alpha=”.5″/>
<mx:Form id=”fr”>
<mx:FormItem label=”userName”>
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label=”password”>
<mx:TextInput/>
</mx:FormItem>
</mx:Form>
</mx:Panel>

 

 


以上的组件排放是我随意放置的,那么我想知道id为pa的Panel下面的一级组件,有几个呢?我们只要调用childDescriptors就可以知道
private function done():void{
trace(pa.childDescriptors.length);
}
更重要的是,我们可以用childDescriptors对一级组件使用every,filter等一些过滤构造函数,这可有意思多了。

OK,那ComponentDescriptor组件描述该如何?这是一个强大的命令,就是给每个组件打上了个烙印,我可以通过这个知道我希望知道的组件的一些状况。  来点代码,光是描述是比较枯燥的,来自帮助文档的代码

<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”vertical”>
<mx:Panel id=”pa” width=”80%” height=”50%” >
<mx:Button label=”Click” click=”done()”/>
<mx:Text id=”txf” text=”Hello form uncool”/>
<mx:Label text=”Leno is a good guy!” />
<mx:Panel id=”papa” alpha=”.3″ >
</mx:Panel>
<mx:Form id=”fr”  x=”95″ y=”26″>
<mx:FormItem label=”userName”>
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label=”password”>
<mx:TextInput/>
</mx:FormItem>
</mx:Form>
</mx:Panel>
<mx:TextArea id=”ta” width=”80%” height=”50%” />
<mx:Script>
<![CDATA[
import mx.core.ComponentDescriptor;
import flash.utils.*;
private function done():void{
var total:int = pa.childDescriptors.length;
for (var i:int = 0; i < total; i++) {
var c:ComponentDescriptor = pa.childDescriptors[i];
var d:Object = c.properties;
ta.text += “组件ID :”+c.id + “组件款式 :” + c.type + “\n”;
for (var p:String in d) {
ta.text += “属性: ” + p + ” — ” + d[p] + “\n”;
}
}
}
]]>
</mx:Script>
</mx:Application>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值