Flex ItemRenderers
Я знаю, что ItemRenderer является ClassFactory, и что вы можете использовать метод newInstance ClassFactory для получения экземпляра ItemRenderer. Мой вопрос, однако, возможно ли использовать методы ItemRenderer без использования ClassFactory.newInstance()?
В моем случае я не могу использовать этот метод newInstance, потому что он не сохраняет состояние.
Есть ли способ, которым я могу сделать это? Спасибо!
3 ответа
ItemRenderer - это компонент, как и любой другой. Свойство itemRenderer класса, основанного на списке, имеет значение ClassFactory. Если у вас есть ссылка на экземпляр компонента itemRenderer, вы можете вызывать методы для него.
Вы не можете вызвать метод для любого компонента, если экземпляр, если этот экземпляр компонента еще не был создан. Поэтому, чтобы вызвать метод itemRenderer без использования ClassFactory.newInstance(), вы должны вручную создать свой собственный экземпляр, используя ключевое слово 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)