如何引用一个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 >
< 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 >
< 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,然后单击按钮:
![](https://i-blog.csdnimg.cn/blog_migrate/e1ff5a1ac0506538b0024ac951f22357.gif)
可见调用了实例方法。
注:走了不少弯路,起初我以为通过List的getChildAt()可以得到renderer的引用,后来发觉不是,通过Alert它发现其 实getChildAt(3)得到的是ListBaseContentHolder的实例,后查了查ListBaseContentHolder得方法里 面有个listItems数组放着每一项的引用,于是有了引用什么都好说了。