Apache flex 是否强制所有项目呈现器提交属性?
我有一个项目渲染器,用于检查外部源的显示信息。如果该信息发生更改,我希望强制所有项目渲染器实例进行检查 强制列表或网格中的所有项目呈现器执行Apache flex 是否强制所有项目呈现器提交属性?,apache-flex,datagrid,itemrenderer,Apache Flex,Datagrid,Itemrenderer,我有一个项目渲染器,用于检查外部源的显示信息。如果该信息发生更改,我希望强制所有项目渲染器实例进行检查 强制列表或网格中的所有项目呈现器执行commitProperties或执行其他方法的最佳方法是什么 我已经读过了 grid.itemRenderer属性将使 它们都初始化了 我也收到了建议 递归地遍历所有 网格的子项和调用invalidateProperties 在我找到的所有UIC组件上 有什么想法吗?备选方案?请记住,在Flex列表中,您正在处理虚拟化和itemRenderer回收,因
commitProperties
或执行其他方法的最佳方法是什么
- 我已经读过了
属性将使 它们都初始化了grid.itemRenderer
- 我也收到了建议
递归地遍历所有
网格的子项和调用
在我找到的所有UIC组件上invalidateProperties
有什么想法吗?备选方案?请记住,在Flex列表中,您正在处理虚拟化和itemRenderer回收,因此通常只有当前可见的ItemRenders实际存在,因此实际上需要更新 以下内容适用于基于Spark列表的控件:
for ( var i:int=0; i< sparkList.dataGroup.numElements; i++ )
{
var element:UIComponent = sparkList.dataGroup.getElementAt( i ) as UIComponent;
if ( element )
element.invalidateProperties();
else
trace("element " + i.toString() + " wasn't there");
}
for(变量i:int=0;i
如果您有100个项目,这将更新10个可见项目,并忽略虚拟剩余项目
如果您使用的是mx DataGrid,您可能想尝试一种变体,但它不使用DataGroup/Spark虚拟化,因此我无法立即为您提供答案
另外,我正在对一个完全基于Spark的数据网格进行最后的润色,完成后我会发布链接。数据组有GetItemIndicatesInView(),它将为您提供所有视图中项目渲染器的标记。使用这些标记调用getElementAt 我还通常扩展ItemRenderer并添加以下内容,这将导致项目渲染器的状态刷新
public function invalidateSkinState():void
{
super.invalidateRendererState();
}
公共函数updateAllRenderer():void
{
如果(!list.dataGroup)
返回;
如果(!list.dataGroup.dataProvider)
返回;
for(变量索引:int=0;索引
对我来说很好
public function updateAllRenderer():void
{
if (!list.dataGroup)
return;
if (!list.dataGroup.dataProvider)
return;
for ( var index:int=0; index< list.dataGroup.numElements; index++ )
{
var item:Object = list.dataGroup.dataProvider.getItemAt(index);
var renderer:IVisualElement = list.dataGroup.getElementAt( index ) as IVisualElement;
if ( renderer )
list.updateRenderer( renderer, index, item );
}
}