Flex中的ArrayCollection绑定警告: unable to bind to property

转载: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类型。

Flex中的ArrayCollection绑定警告: unable to bind to property_第1张图片


解决方法如下:

<?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()
   {
   }

}
}

通过上面的方法,就可以很轻松地解决绑定的问题,而这种方法,我称其为“类绑定法”。


你可能感兴趣的:(Flex中的ArrayCollection绑定警告: unable to bind to property)