我不明白为什么当我们更改dataprovider
上的数据时,所有受影响列的itemRenderers
被调用?这里是我的问题的一个小例子:Flex s:DataGrid所有ItemRenderer被触发
应用:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.FlexEvent;
private var _ac:ArrayCollection = new ArrayCollection();
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
var i:int = 10;
while(i >= 0)
{
_ac.addItem({fieldA:Math.random() * 100, fieldB:Math.random() * 100});
i--;
}
dg.dataProvider = _ac;
dg.requestedRowCount = _ac.length;
}
protected function button1_clickHandler(event:MouseEvent):void
{
_ac.getItemAt(0)["fieldA"] = Math.random() * 100;
_ac.getItemAt(0)["fieldB"] = Math.random() * 100;
_ac.refresh();
}
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout />
</s:layout>
<s:Button label="change data" click="button1_clickHandler(event)" />
<s:DataGrid id="dg">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="fieldA" itemRenderer="MyItemRenderer" />
<s:GridColumn dataField="fieldB" />
</s:ArrayList>
</s:columns>
</s:DataGrid>
</s:Application>
myItemRenderer:
<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true">
<fx:Declarations>
<s:Sequence id="myAnimation" duration="2000" target="{col}" >
<s:Fade alphaFrom="0.0" alphaTo="1.0"/>
<s:Fade alphaFrom="1.0" alphaTo="0.0"/>
</s:Sequence>
</fx:Declarations>
<fx:Script>
<![CDATA[
private var _data:Object;
override public function set data(value:Object):void
{
super.data = value;
_data = value;
if(null != _data)
{
display();
}
}
private function display():void
{
lblData.text = _data[column.dataField];
myAnimation.play();
}
]]>
</fx:Script>
<s:Rect top="-2" left="0" right="0" bottom="-2">
<s:fill>
<s:SolidColor id="col" color="0xFF0000" />
</s:fill>
</s:Rect>
<s:Label id="lblData" top="9" left="7"/>
</s:GridItemRenderer>
我只想对受影响的电池,但每次放动画,在每个单元动画被解雇。我该如何编码?
A)使用强类型数据模型和B)如果实际数据没有改变,在数据设置器的早期返回 – drkstr1
@ drkstr1:A)这只是一个例子。 B)它不会解决我的问题。我已经更改了我的项目渲染器代码,但是现在,它会在更新另一个数据时发生效果结束时再循环。我正在寻找一种方法来防止我的项目渲染器在其效果期间进行回收。 –