【发布时间】:2012-08-29 10:46:20
【问题描述】:
这个问题听起来很简单,只需将 virtualLayout 设置为 false,但这不是我想要的。
我遇到了以下情况。我的 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 会相应变化,并且由于渲染器在调整大小期间会自动失效,因此它们可以使用新属性重绘。
这很好,但不幸的是,新的渲染器是通过这种过程创建的,而不是简单地重用现有的渲染器并让它们自己重绘。
有没有办法改变这种行为,或者有人知道更好的方法来完成这样的任务吗?
【问题讨论】:
-
这可能会导致性能问题和内存泄漏。为什么不使用状态?
-
没有内存泄漏和性能方面我没有看到问题。您认为这种更新渲染器的方法存在哪些潜在缺陷?但你是对的,状态可能是更有效的解决方案,我对状态的唯一问题是改变它们的方式。我需要根据主机组件的大小调整渲染器,但数据对象保持完全相同,因此它不携带有关渲染器应该处于哪个状态的任何信息。
-
@AdrianPirvulescu,再三考虑,不能使用状态,因为渲染器属性是由外部组件动态设置的。渲染器属性例如标签及其大小,渲染器必须根据设置的属性创建标签,很像具有动态列的表格行。
标签: actionscript-3 apache-flex air flex4 itemrenderer