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 回答