我遇到的情况是 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;
我想创建列表的三个不同 View :
- 显示队列中所有个上传内容
- 另一个仅显示
Upload.type == "Update"
的上传项目 - 另一个仅显示
Upload.type == "Create"
的项目。
另一个例子是电子邮件收件箱,我们可以在其中过滤“全部、未读或已读”。
我意识到我可以创建三个不同的列表,每个列表对应一个 ListView (也许我只是比较挑剔),但我想知道:
是否有任何简单的方法可以根据参数(例如 type ==“Upload”
)有条件地从 DataProvider 中选择要显示的项目,这样我就不必同时处理三个单独的项目ArrayCollections 是什么?
如果不是,那就是 3 个不同的列表和 3 个 ArrayCollections!
最佳答案
您想要查看数组集合上的过滤函数属性。您可以将过滤器分配给一个函数,该函数将在上传时查看属性,并有条件地决定是否应将其包含在集合中。设置过滤函数并在集合上调用refresh()后,对象的子集将出现在ArrayCollection中,但原始对象不会丢失。只需清除过滤器,然后在 ArrayCollection 上调用刷新()即可将其返回到其原始集合。
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;
}
关于apache-flex - Spark 列表 : Show subset of Data Provider based on parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6898027/