Flex3和Flex4中dataProvider的差异是什么

 我来答
福喜900
推荐于2016-09-08 · TA获得超过6.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:0%
帮助的人:1亿
展开全部
我们都知道,Flex中有一类组件,通称为基于列表的组件(包括Flex3中的DataGrid,List,TileList,以及Flex4中增加的DropDownList等),另外Flex4还提供了比较灵活的数据容器机制(DataGroup和SkinableDataContainer),而无论是哪一种,都提供了dataProvider属性,我们可以将数据源绑定到这个属性上,让组件按照所需的格式来显示数据。
但不知道大家是否注意到,MX和Spark组件所接受的dataProvider类型是不同的。比如对于MX中的DataGrid,它的dataProvider可接受类型是Object,这样我们传递的数据格式就相对灵活,比如我们不使用ArrayCollection,而是把一个Array传给它,也可以工作的很好,代码:
<mx:DataGrid id="dg" width="500" height="400">
<mx:dataProvider>
<fx:Array>
<local:TestVO name="hello" info="hello1" />
<local:TestVO name="hi" info="hi1" />
<local:TestVO name="do" info="do1" />
</fx:Array>
</mx:dataProvider>
</mx:DataGrid>
这里读者可能会有疑问,从我们之前所获取到的知识来判断,Array是不能用于数据绑定的,它不具备监视数据变更的功能,Adobe反复建议我们使用ArrayList或ArrayCollection,那为什么上面的代码还能正常工作呢?奥秘在于,Flex编译器自动判断当前dataProvider的类型,如果是Array,则生成一个ArrayCollection来包装它。这也就解释了上面的代码为什么还能正常工作。
这样虽然具备一定的灵活性,但很容易给开发者造成误导,Adobe应该也已经意识到了这一点,所以在Spark组件中做了变更,比如DropDownList组件,它的dataProvider只接受实现了IList接口的数据集合(包括ArrayList,ArrayCollection等),所以我们不能再使用Array作为DropDownList的数据源。比如下面的代码,会被编译器报错:
<s:DropDownList id="ddl" width="500">
<s:dataProvider>
<fx:Array>
<local:TestVO name="hello" info="hello1" />
<local:TestVO name="hi" info="hi1" />
<local:TestVO name="do" info="do1" />
</fx:Array>
</s:dataProvider>
</s:DropDownList>
正确的代码:
<s:DropDownList id="ddl" width="500">
<s:dataProvider>
<s:ArrayCollection>
<s:source>
<fx:Array>
<local:TestVO name="hello" info="hello1" />
<local:TestVO name="hi" info="hi1" />
<local:TestVO name="do" info="do1" />
</fx:Array>
</s:source>
</s:ArrayCollection>
</s:dataProvider>
</s:DropDownList>
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式