Как реализовать пул объектов для средств визуализации данных / элементов Flex

Вы можете достаточно легко подключиться к созданию средств визуализации элементов Flex 4 (через itemRenderer или itemRendererFunction), позволяя извлекать средства визуализации из пула настраиваемых объектов, но как бы вы поместили эти средства визуализации обратно в пул?

Я понимаю, что виртуализация макета представляет собой одну из форм объединения объектов, но мне нужен способ подключиться к этому. Например, когда itemRendererFunction был назначен группе данных с виртуализированным макетом, создание средства визуализации элементов действительно откладывается, но экземпляры не используются повторно - я хотел бы иметь возможность вмешаться в это, если это возможно.

Но даже в случае обычных виртуализированных средств визуализации (где экземпляры подвергаются повторному циклу) все равно было бы полезно иметь возможность управлять пулом вручную. Пулы могут быть разделены между группами данных, например, для уменьшения начального буфера, необходимого для заполнения каждой группы.

Есть ли способ узнать, когда Flex отбрасывает экземпляр средства визуализации элементов? У меня ужасное чувство, что нет надежного способа сказать это - хотя, возможно, он должен быть.

Или есть сумасшедший взлом, который мог бы сработать (например, сохранить все рендереры в пуле и проверить их свойства сцены, чтобы определить доступность)?


person Franky-D    schedule 06.10.2010    source источник
comment
Вот грубая реализация, которая помогает: github.com/darscan/robotlegs-extensions-Oil/blob/master/src/org/   -  person Franky-D    schedule 07.01.2011


Ответы (2)


Похоже, SkinnableDataContainer - это то, с чего нужно начать. В документации предлагается updateRenderer - это то место, на которое можно посмотреть, но код для него мало что делает.

Он также отправляет события RendererExistenceEvent.RENDERER_ADD и RendererExistenceEvent.RENDERER_REMOVE, которые, возможно, стоит прислушаться, если вы хотите зафиксировать, что происходит.

person Gregor Kiddie    schedule 06.10.2010
comment
Потрясающе, это привело меня на верный путь. События RendererExistenceEvent.RENDERER_ADD / REMOVE отправляются из DataGroup. - person Franky-D; 07.10.2010

Это очень интересный вопрос, и RENDERER_REMOVE выглядит как хороший способ сохранить экземпляры в пуле после использования. Но я не понимаю, как можно использовать itemRenderer или itemRendererFunction для предоставления ЭКЗЕМПЛЯРОВ (вместо классов) группе данных ...

person Tom Van den Eynde    schedule 22.12.2010
comment
И itemRenderer, и itemRendererFunction могут использоваться для предоставления экземпляров с помощью mx.core.IFactory. - person Franky-D; 07.01.2011