一直在玩AsWing,好久都没碰Flex,最近由于工作需要又用上了,今天碰到个问题
要用到一个TileList组件,并且自定义itemRenderer,itemRenderer中的数据我就想通过dataProvider来提供数据绑定,下面是TileList的部分代码
<mx:TileList xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" dataProvider="{items}" itemRenderer="CustomItemRender">
items 是一个 ArrayCollection,里面放 itemRenderer的数据绑定对象,在 CustomItemRender中通过 Container的data 属性得到绑定对象
现在需要写一个ItemModel 类,它的实例会放到items中,作为itemRenderer 的绑定数据,即itemRenderer中的data属性就是ItemModel的实例引用
ItemModel的部分代码
[Bindable] public class ItemModel extends EventDispatcher { public var name:String; }
然后是 CustomItemRender.mxml
注意我在绑定 Label text的时候用了 (data as ItemModel).name
<?xml version="1.0" encoding="utf-8"?> <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Label text="{(data as ItemModel ).name}" /> </mx:VBox>
测试的时候,运行是没啥问题,往items里添加new ItemModel() 的时候CustomItemRender中的Label正确显示了ItemModel中的name属性,但是控制台输出了
warning: unable to bind to property ‘name’ on class ‘CustomItemRender’
绑定不了?? 我尝试在运行时修改ItemModel实例的name属性,但CustomItemRender中的Label不会改变……
哪里错了?? 围绕这个问题我断断续续搞了一天…. 试了各种办法后都没搞定
不过就在刚才,我把CustomItemRender中的
<mx:Label text="{(data as ItemModel).name}" />改成
<mx:Label text="{data.name}" />这样就行了….. – -
我只是想加个as ItemModel 可以有代码提示,并且还是为了以后的编程中,能确保data的数据类型