Flex3和Flex4中dataProvider的差异是什么

2020-07-17 科技 77阅读
我们都知道,Flex中有一类组件,通称为基于列表的组件(包括Flex3中的DataGrid,List,TileList,以及Flex4中增加的DropDownList等),另外Flex4还提供了比较灵活的数据容器机制(DataGroup和SkinableDataContainer),而无论是哪一种,都提供了dataProvider属性,我们可以将数据源绑定到这个属性上,让组件按照所需的格式来显示数据。
但不知道大家是否注意到,MX和Spark组件所接受的dataProvider类型是不同的。比如对于MX中的DataGrid,它的dataProvider可接受类型是Object,这样我们传递的数据格式就相对灵活,比如我们不使用ArrayCollection,而是把一个Array传给它,也可以工作的很好,代码:






</fx:Array>
</mx:dataProvider>
</mx:DataGrid>
这里读者可能会有疑问,从我们之前所获取到的知识来判断,Array是不能用于数据绑定的,它不具备监视数据变更的功能,Adobe反复建议我们使用ArrayList或ArrayCollection,那为什么上面的代码还能正常工作呢?奥秘在于,Flex编译器自动判断当前dataProvider的类型,如果是Array,则生成一个ArrayCollection来包装它。这也就解释了上面的代码为什么还能正常工作。
这样虽然具备一定的灵活性,但很容易给开发者造成误导,Adobe应该也已经意识到了这一点,所以在Spark组件中做了变更,比如DropDownList组件,它的dataProvider只接受实现了IList接口的数据集合(包括ArrayList,ArrayCollection等),所以我们不能再使用Array作为DropDownList的数据源。比如下面的代码,会被编译器报错:






</fx:Array>
</s:dataProvider>
</s:DropDownList>
正确的代码:








</fx:Array>
</s:source>
</s:ArrayCollection>
</s:dataProvider>
</s:DropDownList>
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com