在Flex 4中滚动Datagrid时,数据值会丢失颜色

时间:2013-08-05 11:11:13

标签: actionscript-3 flex flex4.5

我在滚动数据网格时遇到问题。滚动时,我的项目渲染器列正在丢失其值。 在我的代码中,我在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>*

1 个答案:

答案 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的链接。