zoukankan      html  css  js  c++  java
  • Flex编程注意之直接获取某个组件的对象(this[]用法)通过id获取控件

    有这样一个需求:假如你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>
  • 相关阅读:
    HDU 1016 Prime Ring Problem
    CreateRemoteThread函数多參数传入用法
    Dynamics CRM2015 on-premises直接升级Dynamics CRM2016 on-premises
    cocos2d-x+lua代码热载入(Hot Swap)的研究
    DirectX 9.0c游戏开发手记之“龙书”第二版学习笔记之8: Chap10: Lighting
    js合并table单元格(拼table的时候并不知道详细几行几列)
    简单图模板 Graph
    POJ-3278-Catch That Cow-广搜(BFS)
    android用存到缓存的方法来保存ListView里的数据
    Ubuntu 14.10中连接Win10的smb共享文件
  • 原文地址:https://www.cnblogs.com/exmyth/p/3248031.html
Copyright © 2011-2022 走看看