【发布时间】:2011-01-21 01:27:50
【问题描述】:
我想为多个附加了不同 filterFunction 并显示不同列的数据网格使用一个数据源(例如数组)。 首先,我认为我使用了一种非常直接的方法:
- 创建数组
- 为每个 DataGrid 创建一个 ArrayCollection 并将“source”属性设置为 Array
- 创建 DataGrid 并将其 dataProvider 属性设置为其指定的 ArrayCollection
所以现在。每个 ArrayCollection 都可以有自己的 filterFunction、排序状态等,但内存中的所有数据只需要一个 Array。
现在到了让我完全困惑的点: 随着新项目被添加到数组中,当然不会调度任何事件,我必须在每个 ArrayCollections 上手动调用 itemUpdated。在调试代码以更深入地了解 Flex 时,我试图弄清楚这个神秘的“itemUpdated”方法做了什么,特别是它在 adobe 文档中指出,如果没有给出“属性”(例如它是空的),一个简单的“刷新()”将发生。 在整个调试过程中,我没有发现任何对“refresh()”的调用(我尽可能深入地研究整个框架(顺便说一句:代码中有很多有趣的 cmets :-)))。 我唯一能找到的是 CollectionChangeEvent 在其“项目”属性中与 PropertyChangeEvent 一起调度。这是一种“更新”(而不是我所期望的“添加”)。当尝试手动调度该事件时,它从未起作用(例如,数据网格没有更新)。 我知道我现在必须坚持使用 itemUpdated,但由于数据提供者可能会变得很大(在两个维度上),性能确实让我担心,我想了解引擎盖下发生了什么。
正如预期的那样,adobe没有帮助:-(
非常感谢所有阅读全文的人。 更要感谢任何回答并给我一些提示的人,让我能够摆脱困惑并更好地理解(如果可能的话)Fles。
最好的,
赫伯特
【问题讨论】:
-
我很困惑。为什么你有 1 个数组作为多个数组集合的源,然后是数据网格的源?为什么不只拥有 1 个 ArrayCollection,它是所有 DataGrids 的来源?
标签: apache-flex datagrid flex3 flexbuilder arraycollection