淺談Flex中直接獲取某個(gè)組件的對(duì)象
Flex中直接獲取某個(gè)組件的對(duì)象方案1:
遍歷這些button所在的容器的,然后通過getChildAt() 或者 getChildByName()這樣的方式獲取。
這是常規(guī)的做法,這種做法的弊端:每次都需要遍歷100次button,顯然效率很慢。
Flex中直接獲取某個(gè)組件的對(duì)象方案2:
當(dāng)建立新的button后,將這個(gè)button存放到哈希表里面,其鍵-值的設(shè)定關(guān)系:key = button.id; value = button;即鍵里面保存的button的id,而value里面保存的button對(duì)象。object[ 'button20' ] = btn20;
在使用的時(shí)候,直接取得第20個(gè)button的做法:var button : Button = object[ 'button' + 20 ];
這樣做無疑要比***種方式快很多倍,但是這種做法的弊端:需要建立一個(gè)哈希表,當(dāng)你的數(shù)據(jù)過多的時(shí)候,無疑這個(gè)哈希表將會(huì)很大。
Flex中直接獲取某個(gè)組件的對(duì)象方案3:
我們***不需要遍歷100次button容器,第二不需要建立一個(gè)哈希表。我們只是用this[xxxx]的方式,即可取出第20個(gè)button。
具體做法:var button : Button = this[ 'button' + 20 ];即可完成操作。無論這些button在什么地方?在什么樣深度的容器里面,只要是它仍在這個(gè)project里面,就可以使用this[xxx]的方式取出。
無疑這種做法是高效的,其實(shí)我們仔細(xì)看一下this[xxx]其實(shí)也是使用哈希表的方式,只不過比方案2好在,我們不需要再建立一個(gè)哈希表,這樣能節(jié)省很多的內(nèi)存空間。
具體請(qǐng)看一下第三種方法的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>
【編輯推薦】