Как да внедрите пул от обекти за рендеринги на данни/елементи на 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 могат да се използват за предоставяне на INSTANCES (вместо класове) на група данни...

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