我在滚动数据网格时遇到问题。滚动时,我的项目渲染器列正在丢失其值。 在我的代码中,我在MouseOver和MouseOut上更改了itemrenderer(标签)的颜色。当我加载数据网格时,这可以正常工作,但是当我向下滚动网格时,某些值的颜色已经改变,就好像已经对它们执行了MouseOver事件一样。
任何人都可以告诉我这是什么问题?
请查看我的datagrid和itemrenderer的代码。请注意,在我的情况下,我使用的是灵活的数据网格。
感谢您的宝贵帮助。
<flxs:columnLevel>
<flxs:FlexDataGridColumnLevel>
<flxs:columns>
<flxs:FlexDataGridColumn dataField="testcol" width="118" id="coltest">
<flxs:itemRenderer>
<fx:Component>
<mx:VBox horizontalAlign="left" paddingLeft="10" verticalAlign="middle">
<fx:Script>
<![CDATA[
import mx.controls.Alert;
protected function lbl1_clickHandler(event:MouseEvent):void
{
//Do Something
}
protected function lbl1_mouseOverHandler(event:MouseEvent):void
{
var dataColor:uint;
var dataUnderline:String = 'none';
if (data.payer == 'D'){
dataColor = 0x999999;
}
else{
dataColor = 0x0DACE0; //color
}
}
protected function lbl_mouseOutHandler(event:MouseEvent):void
{
var dataColor:uint;
if (data.payer == 'D'){
dataColor = 0x999999;
}
else{
dataColor = 0x000000;
}
}
]]>
</fx:Script>
<mx:Label id="lbl" paddingLeft="10" left="10" fontWeight="normal" mouseOut="lbl_mouseOutHandler(event)" mouseOver="lbl_mouseOverHandler(event)" text="{data.testcol}" click="lbl1_clickHandler(event)"/>
</mx:VBox>
</fx:Component>
</flxs:itemRenderer>
</flxs:FlexDataGridColumn>
</flxs:columns>
</flxs:FlexDataGridColumnLevel>
</flxs:columnLevel>
</flxs:FlexDataGrid>*
答案 0 :(得分:2)
简短回答:您没有覆盖itemrenderer上的“设置数据”,因此它将保留以前的属性。
Flex世界中的Itemrenderers被回收,这意味着即使您的列表中可能有100个对象,您也只有10-12个内联itemrenderer的实际实例。需要注意的是,当itemrenderer填充新数据时,不会重置与数据相关的属性。没有重置就是为什么你有渲染器看起来已经被mousedOver实际上他们没有'。
标准解决方案是覆盖完全听起来的“设置数据”功能,它在设置数据时执行操作。如果我有类似的问题,我的代码看起来就像(最好我可以使用9:00的内存)。
override public function set data(value:Object):void
{
if( value != null )
{
super.data = value'
dataColor = 0xwhatever-color-non-moused-over-objects-should-have;
}
}
以下是more information的链接。