PDA

Просмотр полной версии : DataGroup depth sort - утечка пямяти


djyamato
28.03.2012, 20:00
Здравствуйте
я хочу "поднимать" itemRenderer в группе надо всеми при нажатии на него
Вот код

<fx:Script>
<![CDATA[
import itemRenderers.DataGroupColorItemRenderer;

import spark.events.RendererExistenceEvent;

protected function datagroup1_rendererAddHandler(event:RendererExistenceEvent):void
{
var renderer:DataGroupColorItemRenderer = event.renderer as DataGroupColorItemRenderer;
renderer.addEventListener("rendererSelect", rendererSelectHandler);
}

protected function rendererSelectHandler(event:Event):void
{
var clone:Object=Object(event.target.data);
var index:int=ac.getItemIndex(event.target.data);
ac.removeItemAt(index);
ac.refresh();
ac.addItem(clone);
ac.refresh();
event.target.data=null;
}
]]>
</fx:Script>
<fx:Declarations>
<s:ArrayCollection id="ac">
<s:source>
<fx:Object x="20" y="20" color="{Math.random()*0xffffff}"/>
<fx:Object x="30" y="30" color="{Math.random()*0xffffff}"/>
<fx:Object x="40" y="40" color="{Math.random()*0xffffff}"/>
<fx:Object x="50" y="50" color="{Math.random()*0xffffff}"/>
<fx:Object x="60" y="60" color="{Math.random()*0xffffff}"/>
<fx:Object x="70" y="70" color="{Math.random()*0xffffff}"/>
<fx:Object x="80" y="80" color="{Math.random()*0xffffff}"/>
</s:source>
</s:ArrayCollection>
</fx:Declarations>

<s:DataGroup width="100%" height="100%"
dataProvider="{ac}"
itemRenderer="itemRenderers.DataGroupColorItemRenderer"
rendererAdd="datagroup1_rendererAddHandler(event)"/>


Рендерер диспатчит "rendererSelect" при нажятии мышкой на него
В хэндлере rendererSelectHandler создается каждый раз + 1 item (я в профайлере вижу)
Отчего так ? Я же обнуляю event.target.data

alatar
29.03.2012, 13:32
В хэндлере rendererSelectHandler создается каждый раз + 1 item (я в профайлере вижу)
Какой "item"?
Я же обнуляю event.target.data
Это бессмысленно. Как и вызов refresh, в данном случае.

djyamato
29.03.2012, 14:43
Какой "item"?
DataGroupColorItemRenderer, вот этот рендерер создается каждый раз новый и добавляется, по всей видимости, в ArrayCollection потому как количество DataGroupColorItemRenderer в профайлере растет

alatar
29.03.2012, 16:15
Это нормальное поведение, для вашего случая, описанное в документации (http://help.adobe.com/ru_RU/flex/using/WS64909091-7042-4fb8-A243-8FD4E2990264.html#WS486D1976-E12C-4654-B330-3DF3B23614F6).