1

ItemRendererがClassFactoryであり、ClassFactoryのnewInstanceメソッドを使用してItemRendererのインスタンスを取得できることを知っています。しかし、私の質問は、ClassFactory.newInstance()を使用せずにItemRendererのメソッドを使用することは可能ですか?

私の場合、このnewInstanceメソッドは状態を保持しないため、使用できません。

これを行う方法はありますか?ありがとう!

4

3 に答える 3

3

ItemRendererは、他のコンポーネントと同様にコンポーネントです。リストベースのクラスのitemRendererプロパティには、ClassFactoryの値があります。itemRendererコンポーネントのインスタンスへの参照がある場合は、そのインスタンスでメソッドを呼び出すことができます。

コンポーネントインスタンスがまだ作成されていない場合、インスタンスがそのコンポーネントのメソッドを呼び出すことはできません。したがって、ClassFactory.newInstance()を使用せずにitemRendererのメソッドを呼び出すには、newキーワードを使用して独自のインスタンスを手動で作成する必要があります。

于 2012-11-06T15:26:15.763 に答える
2

設定するデータに応じて、状態を再作成するために必要なだけスマートにItemRendererを実装することをお勧めします。一方、データに必要なものがすべて含まれていることを確認してください。レンダラー自体とは異なるスコープでレンダラーと対話することはほとんどありません。

必要に応じて、レンダラーが追加されると、DataGroupはRendererExistenceイベントをディスパッチします。

private function newList():List {
  const list:List = new List();
  list.addEventListener(FlexEvent.INITIALIZE, list_initializeHandler);
  return list;
}

private function list_initializeHandler(event:FlexEvent):void {
  const listBase:ListBase = ListBase(event.target),
      dataGroup:DataGroup = listBase.dataGroup;

  dataGroup.addEventListener(RendererExistenceEvent.RENDERER_ADD, dataGroup_rendererAddHandler);
  dataGroup.addEventListener(RendererExistenceEvent.RENDERER_REMOVE, dataGroup_rendererRemoveHandler);
}

private function dataGroup_rendererAddHandler(event:RendererExistenceEvent):void {
  // renderer added
}

private function dataGroup_rendererRemoveHandler(event:RendererExistenceEvent):void {
  // renderer removed
}

これは、単一アイテムのレンダラーインスタンスを参照する必要がある場合に使用する方法です。

于 2012-11-06T18:17:30.510 に答える
1

静的関数と変数を意味しますか?

関数(または変数、またはconst)を静的として定義する場合、クラス名を介してアクセスできるため、次のように定義できます。

class MyClass {
    public static const className:String="MyClass.className (const)";
    public static function getClassName():String {
        return "MyClass.getClassName (function)";
    }
}

trace(MyClass.className); //prints "MyClass.className (const)"
trace(MyClass.getClassName()); //prints MyClass.getClassName (function)
于 2012-11-06T17:42:00.647 に答える