有这样一个需求:假如你new了一百次Button,同时这些button的id分别赋值如btn1.id = "button1"; btn2.id = "button2";以此类推。
当100个button建立后,我想直接对其第20个button进行操作,那么应该如何实现呢?

方案1:
遍历这些button所在的容器的,然后通过getChildAt() 或者 getChildByName()这样的方式获取。
这是常规的做法,这种做法的弊端:每次都需要遍历100次button,显然效率很慢。

方案2:
当建立新的button后,将这个button存放到哈希表里面,其键-值的设定关系:key = button.id; value = button;
即键里面保存的button的id,而value里面保存的button对象。object[ 'button20' ] = btn20;
在使用的时候,直接取得第20个button的做法:var button : Button = object[ 'button' + 20 ];
这样做无疑要比第一种方式快很多倍,但是这种做法的弊端:需要建立一个哈希表,当你的数据过多的时候,无疑这个哈希表将会很大。

方案3:
我们第一不需要遍历100次button容器,第二不需要建立一个哈希表。我们只是用this[xxxx]的方式,即可取出第20个button。
具体做法:var button : Button = this[ 'button' + 20 ];即可完成操作。无论这些button在什么地方?在什么样深度的容器里面,只要是它仍在这个project里面,就可以使用this[xxx]的方式取出。
无疑这种做法是高效的,其实我们仔细看一下this[xxx]其实也是使用哈希表的方式,只不过比方案2好在,我们不需要再建立一个哈希表,这样能节省很多的内存空间。

id是变量字符串,通过组件的this[varId]就可以取到对应实例了,前提是必须有这个id的实例,否则会空指针,取到的对象是object的,自己转型,例如:Button(this[btnId]).label = "XXX";

也就是说 正常是这样写 :父容器ID.组件ID,但现在组件ID是个变量吧?
换成[]来访问属性:父容器ID[组件ID变量]
如果是当前窗体,就this[组件ID变量]
---------------this[]  好像动态创建的控件 获取不到???
具体请看一下第三种方法的demo:

<?xml version="1.0"?>  
<mx:Application xmlns:mx="http://www.adobe.com/2006/mx
 
 <mx:Script>
    <![CDATA[  
    private var newFontStyle:String;  
    private var newFontSize:int;  
   
    public function changeStyle( s : String ) : void {  
        s = "button" + s;      
        this[ s ].setStyle( "fontSize", 20 );  
    }  
    ]]>
    </mx:Script>  
  
    <mx:Button id="button1" click="changeStyle('2')" label="Button 1" />  
    <mx:Button id="button2" click="changeStyle('1')" label="Button 2" />  
 
</mx:Application>

Flex编程注意之直接获取某个组件的对象(this[]用法)通过id获取控件的更多相关文章

  1. 『Asp.Net 组件』Asp.Net 服务器组件 内嵌JS:让自己的控件动起来

    代码: using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace ...

  2. 『Asp.Net 组件』Asp.Net 服务器组件 内嵌图片:自己的图片控件

    代码: using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace ...

  3. .net dataGridView当鼠标经过时当前行背景色变色;然后【给GridView增加单击行事件,并获取单击行的数据填充到页面中的控件中】

    1.首先在前台dataGridview属性中增加onRowDataBound属性事件 2.然后在后台Observing_RowDataBound事件中增加代码 protected void Obser ...

  4. Atitit..文件上传组件选型and最佳实践总结(3)----断点续传控件的实现

    Atitit..文件上传组件选型and最佳实践总结(3)----断点续传控件的实现 1. 实现思路:::元插件,元设置... 1 2. 实现流程downzip,unzip,exec 1 3. Zip  ...

  5. COM组件开发实践(八)---多线程ActiveX控件和自动调整ActiveX控件大小(下)

    源代码下载:MyActiveX20081229.rar 声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改 ...

  6. COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)

    声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open L ...

  7. listview的gridview视图中,获取列中模板内的button按钮(找控件内的控件)

    点击“间隙”,获取“间隙”旁边隐藏的减号按钮(本图片未显示出来) private void TextBlock_MouseDown_2(object sender, MouseButtonEventA ...

  8. vue+element ui项目总结点(五)Carousel 走马灯组件、Collapse 折叠面板、Tree 树形控件

    <template> <div class="ele_test_box"> <!-- 常用效果 Popover 弹出框组件 具体属性查看官方文档--& ...

  9. js获取服务器生成并返回客户端呈现给客户的控件id的方法

    var repeaterId = '<%=rpData.ClientID %>'; //Repeater的客户端IDvar rows = <%=rpData.Items.Count% ...

随机推荐

  1. 解决键盘上符号打出来的和标着的不一样的错误&不能用ctrl+space切换输入法错误

    0.右键输入法栏,点设置 1.增加”美式键盘“ 2.切换“默认键盘”为美式 3.删除“英式键盘” 4.高级键设置,改为ctrl+space

  2. hdu 4301(基本dp)

    题意:就是给你一块2*n的巧克力,让你把它分成x块,并且每一个单位的巧克力各不相同,问有多少种分法? 分析:用dp[i][j][k],表示到巧克力的第二列时,巧克力被分成了j快,k用来表示第i列上下两 ...

  3. poj 2185(二维kmp)

    题意:让你求一个最小的覆盖子矩阵. 分析:首先第一点是确定的:那就是这个子矩阵肯定位于左上角,然后按行考虑,求出每一行可能的重复子串的长度,然后取所有行都存在并且长度最短的长度最为最小子矩阵的宽, 最 ...

  4. Dapper的完整扩展(转)

    真心想说:其实...我不想用Dapper,如果OrmLite.Net支持参数化的话,也就没Dapper的什么事情了,对于OrmLite.Net只能做后续跟踪...... 这个其实是看了Dapper作者 ...

  5. 已经被cocos2dx给折腾的想要放弃它,专注Unity3D的怀抱了!

    一直使用cocos2dx编写自己的2D小游戏,不得不说,编写个人的超级小规模的游戏,使用cocos2dx有一定的优势,首先门槛很低,编写2D游戏用起来也算顺手,可惜一直没有一个优秀的UI编辑器,好不容 ...

  6. bjfu1277 简单递归

    比较简单的递归问题.对于第k时刻的图形,可以平均分成四块,左上,右上,左下这三块的图形是一模一样的,右下的那一块不包含红毛僵尸,所以把那三块里的加起来就是结果了. /* * Author : ben ...

  7. Masonry 固定宽度 等间距

    -(void)makeEqualDisViews:(NSArray *)views inView:(UIView *)containerView LRpadding:(CGFloat)LRpaddin ...

  8. 闭包在python中的应用,translate和maketrans方法详解

    python对字符串的处理是比较高效的,方法很多.maketrans和translate两个方法被应用的很多,但是具体怎么用常常想不起来. 让我们先回顾下这两个方法吧: 1.s.translate(t ...

  9. SpringMVC + Spring + MyBatis 学习笔记:为MyBatis增加打印SQL功能 (最简化配置)

    系统:WIN8.1 数据库:Oracle 11GR2 开发工具:MyEclipse 8.6 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 1.以下jar包拷贝到 ...

  10. AudioPolicyManager::setDeviceConnectionState 流程(一)

    当有线耳机插入/拔出或蓝牙耳机的插入/拔出等,这些事件都会引起Audio Route的重新配置.重新配置的过程实在AudioPolicyManager::setDeviceConnectionStat ...