ItemRenderer Flex值未根据ArrayCollection Provider呈现

时间:2011-02-04 09:50:52

标签: flex datagrid itemrenderer

我在使用itemRenderer功能时遇到问题。使用ArrayCollection时,使用itemRenderer的DataGrid中的可见数据将被渲染得很好。但是,如果我开始滚动条目,则使用渲染器在单元格中重复这些条目。根据id,单元格未填充日期。我在这里做错了什么。

我读了许多解释,如:

http://blogs.adobe.com/aharui/2007/03/thinking_about_item_renderers_1.html

这里是set数据函数的代码(itemRenderer正在扩展HBox):

override public function set data(value:Object):void {
        _data = value;

        if(data!=null)
        {
            var maxValue:Number = 0;
            var maxFontHeight:int = 18;

            for each(var term:ArrayCollection in _data.story)
            {
                if((term.getItemAt(1) as Number)>maxValue)
                    maxValue=term.getItemAt(1) as Number;
            }

            for each(var term:ArrayCollection in _data.story)
            {
                var FontHeight:int = Math.floor((term.getItemAt(1) as Number) * maxFontHeight / maxValue);

                var l:Label = new Label();
                l.text = term.getItemAt(0) as String;
                l.setStyle("fontWeight","normal");
                l.setStyle("fontFamily","Verdana");
                l.setStyle("paddingRight",0);
                l.setStyle("paddingLeft",0);
                l.setStyle("fontSize", FontHeight);
                l.setStyle("color", 0x000000);

                this.addChild(l);

            }
        }
    }

1 个答案:

答案 0 :(得分:0)

在添加新内容之前,您没有清除渲染器中已有的内容。

尝试将标签的构造移动到createChildren,在set数据中设置文本(而不是构造另一个标签),并记住如果数据为空则清除文本。

例如,您可以进行一些优化,例如在执行工作之前检查新数据与当前数据不同。