Flex ItemRenderers

时间:2012-11-06 15:08:18

标签: flex itemrenderer class-factory

我知道ItemRenderer是一个ClassFactory,您可以使用ClassFactory的newInstance方法来获取ItemRenderer的实例。然而,我的问题是可以在不使用ClassFactory.newInstance()的情况下使用ItemRenderer的方法吗?

在我的情况下,我不能使用这个newInstance方法,因为它不保持状态。

我有什么方法可以做到这一点?谢谢!

3 个答案:

答案 0 :(得分:3)

ItemRenderer是一个组件,与任何其他组件一样。基于列表的类的itemRenderer属性具有ClassFactory的值。如果您对itemRenderer组件的实例有引用,则可以在其上调用方法。

如果尚未创建该组件实例的实例,则无法在任何组件上调用方法。因此,要在不使用ClassFactory.newInstance()的情况下调用itemRenderer上的方法,必须使用new关键字手动创建自己的实例。

答案 1 :(得分: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
}

如果您需要引用单个项目渲染器实例,则可以使用此方法。

答案 2 :(得分: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)