这个问题听起来微不足道,只是将virtualLayout
设为假,但这不是我所追求的。
我有以下情况。我的Flex移动应用程序具有预定义的容器,通常是应用程序总宽度的一半宽度。用户可以最大化这些组件,以便它们占用所有可用宽度。
当然,对于在List
或DataGroup
中显示数据的组件,渲染器必须调整大小。这开箱即用,但我需要它们在组件最大化时显示其他信息。
为此,我创建了一个非常简单的方法来更新渲染器;
private function updateRenderer():void {
_itemRenderer.properties = {isFullScreen: _isFullScreen, headerProperties:_headerProperties, visibleColumns:_visibleColumns, optimalColWidth:_optimalColWidth, grid:this.name, fids:_fids};
_list.itemRenderer = _itemRenderer;
}
渲染器属性(例如visibleColumns)会相应更改,并且由于渲染器在调整大小期间会自动失效,因此可以使用新属性重绘。
这一切都很好,但遗憾的是,新的渲染器是使用这种程序创建的,而不是简单地重用现有的渲染器并让它们自己重绘。
有没有办法改变这种行为,或者有人知道更好的方法来完成这样的任务吗?
答案 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()