【问题标题】:Flex 3 MX List: need to programmatically reorder the list's item renderersFlex 3 MX 列表:需要以编程方式重新排序列表的项目渲染器
【发布时间】:2014-05-05 15:14:38
【问题描述】:

好的,我必须使用 Flex 3,因为我在 Adob​​e Connect 窗格中使用它。我有一个 List 组件,它能够通过拖放重新排序。如果有人离开浏览器并回到会议室,我会尝试重新显示他们如何通过拖放来订购项目。所以我需要一种重新排序列表的方法。我正在研究 dataProvider 上的数组排序。但我一直无法找出正确的事件来对列表进行一次排序,所有项目都有适当的数据。

无论如何,有谁知道如何告诉 itemRenderer 的数据具有有序值,然后告诉列表根据新值对列表中的项目重新排序?

【问题讨论】:

  • 我不是 100% 确定您在问什么 - 您是在寻求对数据进行排序的帮助,还是在调整排序顺序后帮助告诉列表重绘?
  • 两者。我实际上找到了一个解决方案,但有点破解。我认为 Data_Change 事件传递给我的项目的方式正在中断我的排序。我最终设置了一个标志,让它只执行一次我的函数,然后排序就起作用了。我把这里的每一个回答都加了一个,它们在引导我正确的道路上帮助很大。

标签: list apache-flex flex3


【解决方案1】:

我使用的一种可能方式:

使用 key:value, Object{rowIndex:rowData} 将数据保存在 Object(map) 中

例如{1:row1Data, 2:行2数据,...}

根据键准备列表值,然后将其分配给网格。这样,Itemrenderer 将不再需要知道数据的“顺序”。他们的任务只是显示数据。

一旦用户完成拖放 - 更新地图,将其持久化。

希望这会有所帮助。

【讨论】:

  • 我认为这可行,但需要更多架构才能使其运行。我弄清楚了我的问题的排序,但是 itemRenderers 现在被重复了。我需要找到一种方法来使用 invalidateList 来让 List 组件根据 dataProvider 重新绘制自己,或者可能调用 invalidateDisplayList ,但是现在没有人对我的 UI 做任何事情。
【解决方案2】:

如果你使用 ArrayCollection,你可以应用一个排序,然后调用 arrayCollection.refersh() 以用排序刷新集合,然后更新列表显示

【讨论】:

  • 是的,我的列表显示现在正在更新,但我有自定义 itemRenderer,它们在排序完成后会重复。试图查看 invalidateList 或 invalidateDisplayList 以重绘组件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 2017-10-16
  • 2010-09-22
  • 1970-01-01
  • 2014-11-15
相关资源
最近更新 更多