一直在玩AsWing,好久都没碰Flex,最近由于工作需要又用上了,今天碰到个问题
要用到一个TileList组件,并且自定义itemRenderer,itemRenderer中的数据我就想通过dataProvider来提供数据绑定,下面是TileList的部分代码
<mx:TileList xmlns:mx="<a href="http://www.adobe.com/2006/mxml"">http://www.adobe.com/2006/mxml"</a> 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的时候用了 <strong>(data as ItemModel)</strong>.name
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="<a href="http://www.adobe.com/2006/mxml"><br />
">http://www.adobe.com/2006/mxml"><br />
</a> <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的数据类型
评论
哇哈哈,楼上那位你才发现啊 :grin:
Francis 发布
哇哈哈,楼上那位你才发现啊 :grin:
哈哈,我当初玩Flex也遇到此类问题,非常之麻烦,MXML
iiley 发布
哈哈,我当初玩Flex也遇到此类问题,非常之麻烦,MXML为了方便,编译器作了很多文章,比如自动帮你wrap array成为ArrayCollection,有时候,你明明写的是一个类型,实际运行的时候却是另外一个类型。多花些时间,逐步理解清楚MXML各个东西的处理方式,内在规律,就会很顺手了(不过我没有坚持到这一步,哈哈)。
恩,编译器对MXML的处理我的确没琢磨清楚,概念还挺模糊不
harry 发布
恩,编译器对MXML的处理我的确没琢磨清楚,概念还挺模糊不过我今天又试了一个办法,居然可以...就是这样
text="{ItemModel(data).name}看来我还是没搞清楚object as Type和Type(object)的区别啊 :neutral:ItemModel 实体类 加了 [Remoting]
NicikyMa 发布
ItemModel 实体类 加了 [Remoting] 属性了没有 eg. [Remoting] public class ItemModel { public var name; }
@NicikyMa 没找到 Remoting
harry 发布
@NicikyMa 没找到 Remoting 标签的说明,我只知道有个 RemoteClass 标签,似乎是在使用AMF的时候才用到的。
不好意思。。都怪我学识太浅昨天的代码写错了,先表示歉意!
NicikyMa 发布
不好意思。。都怪我学识太浅昨天的代码写错了,先表示歉意! :)[RemoteClass ]标签用在两个地方1)在FlashRemoting的序列化过程中2)DragDrop的数据源中楼主 text="{ItemModel(data).name}的这样的做法是可以满足要求的,如果不嫌麻烦的话,还有下面的方法:
[Bindable]private var
NicikyMa 发布
[Bindable]private var myData:People; override public function set data(value:Object):void{if(value ≤}}然后再控件上直接绑定myData就行!