避免在Flex中自动重用组件

时间:2012-05-28 17:15:30

标签: flex radio-button reusability

实际上,我有一个Datagrid,每个行的单元格内有2个RadioButton控件。像这样:

======================================================
|             |             |   (o) Radiobutton #1   |
|   cell #1   |   cell #2   |   (o) Radiobutton #2   |
======================================================

如果我删除了一行并在此之后添加了另一行,Flex会自动重用之前删除的RadioButtons(以优化我认为的资源)。

creationComplete事件处理程序与每个RadioButton相关联我确认了我的嫌疑人:

  1. 我在特定单元格中创建了一行2个RadioButtons:两个creationComplete处理程序都成功执行。
  2. 我删除了这一行,然后再添加一行。
  3. 现在,creationComplete处理程序没有执行,因此Flex正在使用以前的RadioButtons。
  4. 但我不想在我的应用中出现这种行为。有没有办法强制Flex每次都创建组件(避免重用)?谢谢!

2 个答案:

答案 0 :(得分:1)

But I don't want this behaviour in my app.

如果您关心性能和内存使用情况,那么您确实希望在您的应用中使用此行为。请阅读creating Renderers。请特别注意有关创建可回收渲染器的部分。

Is there any way to force Flex to create the components every single time (avoiding reuse)?

您可以调整DataGrid的大小,以便dataProvider中的每个项目都显示在屏幕上。

如果您正在使用Spark DataGrid,则很可能您可以在布局上设置属性以不使用虚拟布局;但我没有太多钻研Spark DataGrid API,所以我不确定它是否在那里。

我全心全意地建议您重新编写渲染器以侦听dataChange()事件并修改渲染器的显示元素(AKA RadioButton),而不是尝试为dataProvider的每个元素设置单个渲染器实例。

答案 1 :(得分:0)

在Flex 4 / spark列表中,您可以使用useVirtualLayout属性打开和关闭此属性(http://help.adobe.com/en_US/flex/using/WSc2368ca491e3ff92-1483ec4a12136246e76-8000.html)。但是,我不认为ADG还有一个火花版本,所以你对一个假设你关心内存和CPU使用率的组件“卡住”了,你不能告诉它。