如何防止itemRenderer被Flex中的新实例替换

时间:2012-08-29 10:46:21

标签: actionscript-3 flex air flex4 itemrenderer

这个问题听起来微不足道,只是将virtualLayout设为假,但这不是我所追求的。

我有以下情况。我的Flex移动应用程序具有预定义的容器,通常是应用程序总宽度的一半宽度。用户可以最大化这些组件,以便它们占用所有可用宽度。

当然,对于在ListDataGroup中显示数据的组件,渲染器必须调整大小。这开箱即用,但我需要它们在组件最大化时显示其他信息。 为此,我创建了一个非常简单的方法来更新渲染器;

private function updateRenderer():void {
            _itemRenderer.properties = {isFullScreen: _isFullScreen, headerProperties:_headerProperties, visibleColumns:_visibleColumns, optimalColWidth:_optimalColWidth, grid:this.name, fids:_fids};
            _list.itemRenderer = _itemRenderer;
}

渲染器属性(例如visibleColumns)会相应更改,并且由于渲染器在调整大小期间会自动失效,因此可以使用新属性重绘。

这一切都很好,但遗憾的是,新的渲染器是使用这种程序创建的,而不是简单地重用现有的渲染器并让它们自己重绘。

有没有办法改变这种行为,或者有人知道更好的方法来完成这样的任务吗?

1 个答案:

答案 0 :(得分:0)

如果我理解您显示的代码,它将替换itemRenderer属性;所以“预期”当发生这种情况时,所有现有的渲染器都将被销毁 - 因为它们是使用'旧'渲染器创建的 - 然后被替换为“新”渲染器的实例。

您可以考虑直接在渲染器上更改属性:

   (_list.itemRenderer as ClassFactory).properties = {isFullScreen: _isFullScreen, headerProperties:_headerProperties, visibleColumns:_visibleColumns, optimalColWidth:_optimalColWidth, grid:this.name, fids:_fids};

然后强制您的dataProvider刷新,以便在需要时重新绘制所有itemRenderer:

(_list.dataProvider as ArrayCollection).refresh()