Apache flex 是否强制所有项目呈现器提交属性?

Apache flex 是否强制所有项目呈现器提交属性?,apache-flex,datagrid,itemrenderer,Apache Flex,Datagrid,Itemrenderer,我有一个项目渲染器,用于检查外部源的显示信息。如果该信息发生更改,我希望强制所有项目渲染器实例进行检查 强制列表或网格中的所有项目呈现器执行commitProperties或执行其他方法的最佳方法是什么 我已经读过了 grid.itemRenderer属性将使 它们都初始化了 我也收到了建议 递归地遍历所有 网格的子项和调用invalidateProperties 在我找到的所有UIC组件上 有什么想法吗?备选方案?请记住,在Flex列表中,您正在处理虚拟化和itemRenderer回收,因

我有一个项目渲染器,用于检查外部源的显示信息。如果该信息发生更改,我希望强制所有项目渲染器实例进行检查

强制列表或网格中的所有项目呈现器执行
commitProperties
或执行其他方法的最佳方法是什么

  • 我已经读过了
    grid.itemRenderer
    属性将使 它们都初始化了

  • 我也收到了建议 递归地遍历所有 网格的子项和调用
    invalidateProperties
    在我找到的所有UIC组件上


有什么想法吗?备选方案?

请记住,在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 );
        }
    }