【问题标题】:Using one data source for multiple datagrids in Flex3在 Flex3 中为多个数据网格使用一个数据源
【发布时间】: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


【解决方案1】:

您必须为每个 dataProviders 调用 ArrayCollection.refresh() 以获取 dataGrids 以显示对源数组的新更改。

【讨论】:

  • 当然,简单的刷新总能解决问题。但是由于我在该网格中有相当多的数据(是的,我知道,分页和其他东西),所以完全刷新会按照它所说的那样重新计算整个网格,这在简单地添加一个条目时是完全没有必要的。这就是 itemUpdated 背后的想法,因为它(如果提供了正确的参数)不会导致刷新,而是触发正确的事件。只需比较 refresh 方法和 itemUpdated 方法中发生的情况。它不一样。
  • 在我看来,当谈到 dataProviders 时,没有人真正了解 Flex API 的幕后情况。我最初的问题指出了“无刷新()”解决方案以获得更好的性能,但由于没有这样的方法,我会接受这个答案(尽管它不完整/不是我的意思)以便让那些从谷歌找到这个线程并且出于公平考虑的人清楚这一点,因为 Rubosto 的方法总是有效的(相当“稳健”;-))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2011-08-05
相关资源
最近更新 更多