Flex3和Flex4中dataProvider的差异是什么
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>
但不知道大家是否注意到,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>
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询