如何引用一個List的itemRenderer裏的自定義方法,翻了翻手冊也沒大看見有現成的函數,終於琢磨出了一個,不知道好很差,發上來再說:
主程序文件List1.mxml:
<?
xml
version
="1.0"
encoding
="utf-8"
?>
<
mx:Application
xmlns:mx
="http://www.adobe.com/2006/mxml"
>
<
mx:Style
>
Application
{
font-size:12px;
}
</
mx:Style
>
<
mx:Script
>
import mx.controls.Alert;
import mx.controls.listClasses.ListBaseContentHolder;
private function handleClick():void
{
if(txt.text=="")
Alert.show("請輸入數字1-7(注意:未驗證合法性)");
else
{
var n:int=parseInt(txt.text);
//這句是關鍵代碼
(mylist.getChildAt(2) as ListBaseContentHolder).listItems[n-1][0].alertBtn();
}
}
</
mx:Script
>
<
mx:Model
id
="arr"
>
<
root
>
<
item
label
="按鈕1"
/>
<
item
label
="按鈕2"
/>
<
item
label
="按鈕3"
/>
<
item
label
="按鈕4"
/>
<
item
label
="按鈕5"
/>
<
item
label
="按鈕6"
/>
<
item
label
="按鈕7"
/>
<
item
label
="按鈕8"
/>
<
item
label
="按鈕9"
/>
</
root
>
</
mx:Model
>
<
mx:List
id
="mylist"
dataProvider
="{arr.item}"
width
="100"
rowCount
="9"
leading
="0"
itemRenderer
="MyRenderer"
/>
<
mx:TextInput
id
="txt"
/>
<
mx:Button
label
="觸發"
click
="handleClick();"
/>
</
mx:Application
>
itemRenderer的組件文件MyRenderer.mxml:
<?
xml
version
="1.0"
encoding
="utf-8"
?>
<
mx:Box
xmlns:mx
="http://www.adobe.com/2006/mxml"
width
="100%"
height
="100%"
horizontalGap
="0"
verticalGap
="0"
paddingLeft
="0"
paddingRight
="0"
paddingTop
="0"
paddingBottom
="0"
>
<
mx:Script
>
import mx.controls.Alert;
public function alertBtn():void
{
Alert.show("觸發了alertBtn(),我是:"+btn.label);
}
</
mx:Script
>
<
mx:Button
id
="btn"
label
="{data.label}"
width
="100%"
cornerRadius
="0"
/>
</
mx:Box
>
運行演示,輸入呼叫的實例位置1-9:我輸入3,而後單擊按鈕:
可見調用了實例方法。
注:走了很多彎路,起初我覺得經過List的getChildAt()能夠獲得renderer的引用,後來發覺不是,經過Alert它發現其實getChildAt(3)獲得的是ListBaseContentHolder的實例,後查了查ListBaseContentHolder得方法裏面有個listItems數組放着每一項的引用,因而有了引用什麼都好說了。