【问题标题】:Flex List limit number of elementsFlex List 限制元素数量
【发布时间】:2012-03-09 14:03:31
【问题描述】:

是否可以定义一个属性来限制将出现在 mx:List 中的元素数量?我已阅读有关设置属性 rowCount 的信息,但没有看到任何效果。 可以应用过滤器来完成此操作吗?我的意图是避免从列表/数组集合中删除项目,而只是“隐藏”它们。这个可以吗?

【问题讨论】:

    标签: apache-flex list hide elements


    【解决方案1】:

    您可以通过使用 Collection 类(例如 ArrayCollection)并过滤数据来“隐藏”基于 List 的类中的项目,而无需修改底层源数据。

    阅读这些docs on Collection filtering

    引用:

    您使用过滤器功能将集合中的数据视图限制为 源数据对象的子集。该函数必须采用单个 对象参数,对应一个集合项,必须 返回一个布尔值,指定是否将项目包含在 看法。与排序一样,当您指定或更改过滤器功能时, 您必须在集合上调用 refresh() 方法才能显示 过滤结果。将字符串数组的集合视图限制为 仅包含以 M 开头的字符串,例如,使用以下 过滤功能:

    public function stateFilterFunc(item:Object):Boolean
    {
        return item >= "M" && item < "N";
    }
    

    【讨论】:

    • 他感谢您的评论。但是,我想根据它们的位置过滤项目。在某个视图中,我想显示前 20 个,而在另一个视图中,我想显示所有这些。我可以根据这个过滤吗?
    • @Rui 我不知道“根据他们的位置过滤”是什么意思。如果你能定义它;你可能可以编码它。您是否对两个单独的列表使用相同的 dataProvider?
    • 我已经按日期过滤项目。在一个状态下,我希望我的列表显示前 20 个项目,在另一个状态下,我想显示所有项目。
    • 您可以使用 originalCollection.getItemIndex(item)
    【解决方案2】:

    另一种选择是使用新的数组集合并从大数组集合中获取有限的项目:

    //get first 10 elements
    myArrayCollection = new ArrayCollection( myBigArrayCollection.toArray().slice(0,9) );
    

    如果你想使用寻呼机,你可以拿着一个计数器来跟踪用户在哪个页面上,并从你的大数组集合中获取下一个元素。示例:

    //this is just a (very) simple example
    //page = integer (counter) for knowing which page the user is on
    page = 0;
    page_low = page*10;
    page_high = page_low + 9;
    myArrayCollection = new ArrayCollection( myBigArrayCollection.toArray().slice(page_low,page_high) );
    

    (仍然使用过滤器是更优雅的解决方案)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 2020-10-28
      • 2020-03-21
      • 2020-09-28
      • 2013-04-08
      • 1970-01-01
      相关资源
      最近更新 更多