Flex DataGrid ItemRenderer Проблема - PullRequest
       9

Flex DataGrid ItemRenderer Проблема

2 голосов
/ 26 января 2010

У меня есть сетка, заполненная> 1000 наборов данных. один столбец использует пользовательский itemRenderer, который используется для отображения значения внешнего ключа.

Все наборы данных, которые отображаются без прокрутки, отображаются с правильной информацией. Но когда дело доходит до прокрутки, некоторые наборы данных будут отображать неправильное значение в itemRenderer. Насколько я понял, это из-за повторного использования itemRenderers.

Но как бы многократно ни использовалось, отображение неверной информации не может быть результатом. Так как мне избавиться от этой проблемы?

РЕДАКТИРОВАТЬ: мне удалось избавиться от этой проблемы, но я все равно опубликую некоторый код, чтобы указать мой план:

<?xml version="1.0" encoding="utf-8"?>

<mx:Script>
    <![CDATA[
        private var dataAccess : DataAccess = DataAccess.getInstance();
        private var foreign : ArrayCollection = new ArrayCollection();

        private function onCreationComplete() : void
        {

            dataAccess.service.getForeignDatasets.addEventListener("result", onGetForeignDatasets);
            dataAccess.service.getForeignDatasets();
        }

        private function onGetForeignDatasets(event : ResultEvent) : void
        {
            foreign = event.result as ArrayCollection;  
            preSelect();
        }   

        //gets the entry from the foreign entity which matches 
        //the foreign key in this.data
        private function preSelect() : void
        {
            for each(var obj : Object in foreign)
                {
                    if(obj.id == data.foreignKey))
                    {
                        value.text = obj.name;
                        return;
                    }
                }

            value.text = "";    
        }

        private function onDataChange() : void
        {
            preSelect();
        }       
    ]]>
</mx:Script>

Я оставил весь ненужный код ...

Код выше работает и решает проблему отображения неверных данных.

Есть еще идеи для реализации этой функциональности?

Ответы [ 3 ]

0 голосов
/ 24 апреля 2012

Работая с пользовательским ItemRenderer для элемента управления DataGrid, у меня также была такая проблема. Все было хорошо, но когда я прокручивал DataGrid, мои ItemRenderers не показывали правильные значения. Мне потребовалось много времени, чтобы понять, что случилось. Причина в том, как работает IremRenderers. Помните, что itemRenderers перерабатываются. Пожалуйста, прочитайте очень хорошую статью о Item Renderers .

Короче говоря, вы должны установить данные для ItemRenderer не в конструкторе или событии CreationComplete, а в другой функции.

Для MX DataGrid - вам необходимо переопределить данные набора открытых функций, например:

override public function set data( value:Object ) : void 
{ 
    super.data = value; 
    // your code to set your data 
}

Для Spark DataGrid вы должны сделать это в

override public function prepare (hasBeenRecycled)

Надеюсь, это поможет.

0 голосов
/ 06 декабря 2012

useVirtualLayout="false" - запретить повторное использование itemRenderers. Это свойство макета базового компонента List.

См. http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/layouts/supportClasses/LayoutBase.html#useVirtualLayout

0 голосов
/ 26 января 2010

Это происходит, если средство визуализации элементов кэширует информацию в частных переменных (или где-либо еще).Визуализация элемента получает данные через свойство data.Он не должен использовать какие-либо данные, не входящие в свойство data.Если вам абсолютно необходимо выйти на улицу, чтобы получить другие данные (чего на самом деле не следует делать), убедитесь, что эти данные аннулируются при каждом изменении свойства данных (переопределите данные, чтобы пометить измененный флаг, а затем вызовите super.data).1001 *

Если это не решит вашу проблему, опубликуйте код средства визуализации.

...