当前位置: 代码迷 >> Web前端 >> mx跟spark中dataProvider的差异
  详细解决方案

mx跟spark中dataProvider的差异

热度:109   发布时间:2012-09-20 09:36:51.0
mx和spark中dataProvider的差异

???? 在Flex中列表组件(DataGridBase, List, TileBase ),数据容器(DataGroup和SkinableDataContainer),都提供了dataProvider属性,我们可以将数据源绑定到这个属性上,让组件按照所需的格式来显示数据。

但是mx组件和spark组件所接受的dataProvider类型是不同的,mx的类型是Object,spark类型是IList。

??? mx中列表组件继承自ListBase类,如下代码是设置数据源的。

???

 public function set dataProvider(value:Object):void
    {
        if (collection)
        {
            collection.removeEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler);
        }

        if (value is Array)
        {
            collection = new ArrayCollection(value as Array);
        }
        else if (value is ICollectionView)
        {
            collection = ICollectionView(value);
        }
        else if (value is IList)
        {
            collection = new ListCollectionView(IList(value));
        }
        else if (value is XMLList)
        {
            collection = new XMLListCollection(value as XMLList);
        }
        else if (value is XML)
        {
            var xl:XMLList = new XMLList();
            xl += value;
            collection = new XMLListCollection(xl);
        }
        else
        {
            // convert it to an array containing this one item
            var tmp:Array = [];
            if (value != null)
                tmp.push(value);
            collection = new ArrayCollection(tmp);
        }
}

?、

? 从上面的代码可以看到列表组件支持的数据类型有Array、ICollectionView、XMLListCollection、ArrayCollection等。

?

?在spark中,dataProvider类型必须是IList类型。 ArrayList, AsyncListView, ListCollectionView 类实现了IList接口,但是Array类没有实现IList接口,因此在sprak中Array就不能做为列表组件的数据源。

?

?ArrayList 类是使用后备 Array 作为数据源的 IList 的一个简单实现,也就是说,它比ArrayCollection更轻量级,想ArrayCollection具备的过滤,排序等功能,ArrayList是不具备的。如果您用不到ArrayCollection的一些复杂功能,可以使用ArrayList来获取更好的执行效率。

??

  相关解决方案