FlexR ItemRenderer Значения не отображаются в соответствии с поставщиком ArrayCollection - PullRequest
0 голосов
/ 04 февраля 2011

У меня проблема с использованием функции itemRenderer. При использовании ArrayCollection видимые данные в DataGrid с использованием itemRenderer будут отображаться очень хорошо. Но если я начну прокручивать, записи будут повторяться в ячейках с помощью средства визуализации. Ячейки не заполнены датой в соответствии с идентификатором. Какую ошибку я здесь делаю.

Я прочитал много объяснений, таких как:

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

вот код для функции установки данных (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 голосов
/ 04 февраля 2011

Вы не очищаете то, что уже есть в рендере, прежде чем добавлять новые вещи.

Попробуйте переместить конструкцию метки в createChildren, задайте текст в заданных данных (вместо создания другой метки) и не забудьте очистить текст, если данные равны нулю.

Есть еще несколько оптимизаций, которые вы можете сделать, например, проверка новых данных не совпадает с текущими данными, например, перед выполнением работы.

...