Избегайте кэширования ItemRenders в списке искр в Flex 4 - PullRequest
2 голосов
/ 11 сентября 2010

У меня есть два Списка Искр с пользовательскими Рендерерами Предметов. Я работаю над приложением, которое позволяет пользователям перетаскивать эти средства визуализации элементов из одного списка в другой. Когда один из этих IR сбрасывается в новой позиции или в другом Списке, я обновляю провайдеров данных: я удаляю объект из провайдера данных одного списка и добавляю его в провайдер данных другого. Это работает нормально.

Проблема в том, что иногда IR кэшируется и не показывает правильную информацию, основанную на его данных.

Как я могу заставить Списки никогда не кэшировать IR, чтобы каждый раз, когда я изменял поставщик данных, все Рендеры Предметов воссоздали все IR. Производительность не будет проблемой, так как у меня есть несколько пунктов в каждом списке.

Ответы [ 3 ]

3 голосов
/ 11 сентября 2010

Несколько вещей ..

1) ItemRenderers всегда должны кэшироваться [и использоваться повторно].Это одно из преимуществ использования списка Flex в первую очередь.Я подозреваю, что ваш itemRenderer реализован неправильно, чтобы не изменяться при изменении данных.Если вы поделитесь кодом для этого, это будет полезно.Но, по сути, ваш itemRenderer должен прослушивать событие dataChange, и при изменении данных вы должны обновить визуальное отображение компонента новыми данными.

2) В Flex 3 я бы поклялся, что перетаскивание элемента из одного списка в другой автоматически обновит соответствующие dataProviders.Вы уверены, что вам нужно написать ручной код, чтобы внести эти изменения?Тем не менее, вам понадобится код, чтобы обновить свой бэкэнд в зависимости от ситуации.

1 голос
/ 12 сентября 2010

Flextras имеет несколько хороших моментов, но чтобы ответить на ваш конкретный вопрос, вы можете установить для useVirtualLayout значение false в списках искр.Это обеспечит наличие средства рендеринга для каждого элемента в вашем списке и, таким образом, позволит избежать проблем с утилизацией.Вы действительно должны делать это только тогда, когда у вас есть относительно короткий список элементов, в противном случае у вас будут проблемы с производительностью, которые, как отметил Flextras, являются причиной того, что Flex перерабатывает средства визуализации.

0 голосов
/ 24 сентября 2013

Я добавил метод сброса в мои данные набора, чтобы обеспечить повторную инициализацию переменных рендерера

 override public function set data(object:Object):void
 {

if (object == null)
{
    return;
}

reset(); // reset locals to their base. ie. x=0, y=0, counter=0

    // set up renderer using data        

 }
...