1

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

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

List自然,对于以 a或显示数据的组件,DataGroup渲染器必须调整大小。开箱即用,但我需要它们在组件最大化时显示附加信息。为此,我创建了一个非常简单的方法来更新渲染器;

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

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

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

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

4

1 回答 1

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()
于 2012-08-29T12:52:47.960 回答