如何引用一个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数组放着每一项的引用,因而有了引用什么都好说了。