3

外部ソースの表示情報をチェックするアイテム レンダラーがあります。その情報が変更された場合は、すべてのアイテム レンダラー インスタンスに強制的にチェックさせたいと考えています。

リストまたはグリッド内のすべてのアイテム レンダラーに強制的にcommitProperties他のメソッドを実行させる、または実行させる最善の方法は何ですか?

  • grid.itemRendererプロパティをリセットすると、それらがすべて初期化されることを読みました 。

  • また、グリッドのすべての子を再帰的に反復処理し、invalidateProperties 見つけたすべての UIComponents を呼び出すという提案も受け取りました。

何かご意見は?代替案?

4

3 に答える 3

1

Flex Listでは、仮想化とitemRendererのリサイクルを扱っているため、通常、現在表示されているitemRendererのみが実際に存在し、したがって実際に更新が必要なものであることに注意してください。

以下は、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");

            }

100個のアイテムがある場合、これにより、表示されている10個のアイテムが更新され、残りの仮想アイテムは無視されます。

mx DataGridを使用している場合は、これの変形を試してみることをお勧めしますが、DataGroup / Spark仮想化を使用していないため、頭から離れて答えることはできません。

PS完全にSparkベースのDataGridの仕上げを行っています。完了したら、リンクを投稿します。

于 2010-03-06T21:08:22.627 に答える
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 );
        }
    }

私にとってはうまくいきます

于 2014-03-13T07:31:29.597 に答える
0

データグループには getItemIndicesInView() があり、表示されているすべてのアイテム レンダラーのインデックスを取得できます。これらのインデックスを使用して getElementAt を呼び出します。

また、通常は ItemRenderer を拡張し、アイテム レンダラーの状態を更新する次のコードを追加します。

   public function invalidateSkinState():void
   {
      super.invalidateRendererState();
   }
于 2011-04-14T03:12:59.447 に答える