我知道 ItemRenderer 是 ClassFactory,您可以使用 ClassFactory 的 newInstance 方法来获取 ItemRenderer 的实例。但是,我的问题是,是否可以在不使用 ClassFactory.newInstance() 的情况下使用 ItemRenderer 的方法?
在我的情况下,我不能使用这个 newInstance 方法,因为它不保持状态。
有什么办法可以做到这一点吗?谢谢!
我知道 ItemRenderer 是 ClassFactory,您可以使用 ClassFactory 的 newInstance 方法来获取 ItemRenderer 的实例。但是,我的问题是,是否可以在不使用 ClassFactory.newInstance() 的情况下使用 ItemRenderer 的方法?
在我的情况下,我不能使用这个 newInstance 方法,因为它不保持状态。
有什么办法可以做到这一点吗?谢谢!
ItemRenderer 是一个组件,就像任何其他组件一样。基于列表的类的 itemRenderer 属性具有 ClassFactory 的值。如果您有对 itemRenderer 组件实例的引用,则可以在其上调用方法。
如果该组件实例尚未创建,则您不能调用任何组件上的方法。因此,要在不使用 ClassFactory.newInstance() 的情况下调用 itemRenderer 上的方法,您必须使用 new 关键字手动创建自己的实例。
您可能希望根据设置的数据重新创建状态所需的智能实现 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
}
如果您需要引用单个项目渲染器实例,这是要走的路。
你的意思是静态函数和变量吗?
如果您将函数(或变量或 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)