转载:http://hi.baidu.com/exgeztfhdnbkmwd/item/5820201b17cae1fa9d778acc
在Flex的开发中,绑定是经常用到的,而令人烦恼的是会不断出现以下警告:
warning: unable to bind to property 'icon' on class 'Object' (class is not an IEventDispatcher)
那到底应该怎么解决?看如下例子:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:ArrayCollection id="arrColl">
<mx:source>
<mx:Array id="arr">
<mx:Object data="0" label="" icon="img/0.gif"/>
<mx:Object data="1" label="" icon="img/1.gif"/>
<mx:Object data="2" label="" icon="img/2.gif"/>
<mx:Object data="3" label="" icon="img/3.gif"/>
<mx:Object data="4" label="" icon="img/4.gif"/>
<mx:Object data="5" label="" icon="img/5.gif"/>
</mx:Array>
</mx:source>
</mx:ArrayCollection>
<mx:PopUpButton id="popUpButton_pic" openAlways="true" width="43" height="23">
<mx:popUp>
<mx:TitleWindow id="titleWindow_popUp" width="450" height="400"
showCloseButton="true" verticalScrollPolicy="on" horizontalScrollPolicy="off" close="popUpButton_pic.close();">
<mx:ToolBar width="430">
<mx:Repeater id="myRep" dataProvider="{arrColl}">
<mx:Image id="myimgclick" buttonMode="true" data="{myRep.currentIndex}" source="{myRep.currentItem.icon}">
</mx:Image>
</mx:Repeater>
</mx:ToolBar>
</mx:TitleWindow>
</mx:popUp>
</mx:PopUpButton>
</mx:Application>
运行上面的例子,是没有错误,但是警告却不少(如下图),原因在于Objet 不是IEventDispatcher类型。
解决方法如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*">
<mx:ArrayCollection id="arrColl">
<mx:source>
<mx:Array id="arr">
<local:myCls data="0" label="" icon="img/0.gif"/>
<local:myCls data="1" label="" icon="img/1.gif"/>
<local:myCls data="2" label="" icon="img/2.gif"/>
<local:myCls data="3" label="" icon="img/3.gif"/>
<local:myCls data="4" label="" icon="img/4.gif"/>
<local:myCls data="5" label="" icon="img/5.gif"/>
</mx:Array>
</mx:source>
</mx:ArrayCollection>
<mx:PopUpButton id="popUpButton_pic" openAlways="true" width="43" height="23">
<mx:popUp>
<mx:TitleWindow id="titleWindow_popUp" width="450" height="400"
showCloseButton="true" verticalScrollPolicy="on" horizontalScrollPolicy="off" close="popUpButton_pic.close();">
<mx:ToolBar width="430">
<mx:Repeater id="myRep" dataProvider="{arrColl}">
<mx:Image id="myimgclick" buttonMode="true" data="{myRep.currentIndex}" source="{myRep.currentItem.icon}">
</mx:Image>
</mx:Repeater>
</mx:ToolBar>
</mx:TitleWindow>
</mx:popUp>
</mx:PopUpButton>
</mx:Application>
myCls.as:
package
{
[Bindable]
public class myCls
{
public var data:String;
public var tp:String;
public var label:String;
public var icon:String;
public function myCls()
{
}
}
}
通过上面的方法,就可以很轻松地解决绑定的问题,而这种方法,我称其为“类绑定法”。