【问题标题】:Detect when Flex Spark List's data has changed检测 Flex Spark List 的数据何时发生变化
【发布时间】:2010-10-06 18:03:51
【问题描述】:

我需要检测 Flex Spark 列表 (spark.components.List) 数据何时发生更改,以便我可以以编程方式更改其滚动条。 我知道 List 是一个 EventDispatcher,但不清楚我要注册哪个事件。

编辑:我的列表的 dataProvider 是一个 ArrayCollection,它也添加了元素。所以 dataProvider 永远不会被替换。我考虑听支持 ArrayCollection,但列表可能会在我的听者之后对更改做出反应,这会改变滚动条。因此,我的听众的更改将被列表的更改所取代。

【问题讨论】:

  • 您如何定义数据更改?何时更换了 dataProvider?当 dataPRvider 删除或添加元素时?还是别的什么?
  • 我正在使用相同的 dataProvider 实例。当我需要更改列表时,我只需从 dataProvider 添加/删除数据。

标签: flash apache-flex flex-spark


【解决方案1】:

为什么不向 ArrayCollection 添加一个 EventListener 并给它一个高 priority?这将允许您侦听数据集合本身的更新事件,并强制您的侦听器首先发生。

编辑:我自己没有尝试过:^)

【讨论】:

    【解决方案2】:

    不知道是不是还是这样!但是您可以执行以下操作: 为您的火花列表实现一个 itemRenderer 并使用您的 itemRenderer 的“dataChange”属性来查看您的数据何时更改? 像这样的:

    您的名单:

    <s:List id="myList" dataProvider="{myArrayCollection}"
            itemRenderer="myItemRenderer" ...>
    </s:List>
    

    现在在您的 itemRenderer 上

    <s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                xmlns:mx="library://ns.adobe.com/flex/mx"
                dataChange={invalidateDisplayList()} >
    </s:ItemRenderer>
    

    例如,在我的情况下,我试图删除列表中的每个项目,之后我的 itemRenderer 可以通过“dataChange”自动更新自身...
    虽然您可以根据自己的需要使用其他的,例如invalidateSize()invalidateLayering() 等。

    【讨论】:

      猜你喜欢
      • 2011-03-17
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 2023-02-20
      相关资源
      最近更新 更多