Spark List:根据参数显示Data Provider的子集

时间:2011-08-01 11:52:49

标签: flex actionscript-3

我的情况是List显示上传对象的队列:

public class Upload
{

    public var type:String; // Update or Create
    public var title:String;
    public var message:String; 
    ...
    }

因此,列表数据提供者看起来像:

var arrayCol:ArrayCollection = new ArrayCollection(
                               {new Upload("Upload", "blah"),
                                new Upload("Create", "blah2")});
list.dataProvider = arrayCol;

我想创建列表的三个不同视图:

  • 一个在队列中显示所有上传内容
  • 另一个仅显示带有Upload.type == "Update"
  • 的上传项目
  • 和另一个仅显示Upload.type == "Create"的项目。

另一个例子是电子邮件收件箱,我们可以在其中过滤“全部,未读或读取”。

我意识到我可以创建三个不同的列表,每个列表一个列表(也许我只是挑剔)但我想知道:

是否有任何简单的方法可以根据参数有条件地从DataProvider中选择要显示的项目(例如type =="Upload"),所以我不必处理三个单独的ArrayCollections?

如果没有,它就是3个不同的列表和3个ArrayCollections!

2 个答案:

答案 0 :(得分:2)

为什么不根据the documentation切换和应用不同的ArrayCollection filterFunction

答案 1 :(得分:2)

您想查看Array Collection上的过滤器函数属性。您可以将过滤器分配给将在上载时查看属性的函数,并有条件地确定它是否应包含在集合中。使用过滤器函数集和对集合调用的refresh(),对象的子集将显示在ArrayCollection中,但原件不会丢失。只需清除过滤器,然后在ArrayCollection上调用refresh()就会将其返回到原始集合。

        var arrayCol:ArrayCollection = new ArrayCollection(
                                            {new Upload("Upload", "blah"),
                                            new Upload("Create", "blah2")});
        arrayCol.filterFunction = filterCompleted;
        arrayCol.refresh();

然后您的过滤器功能将类似于:

        private function filterCompleted(item:Object):Boolean{
            if(Upload(item).isComplete)
                return true;
            return false;
        }