Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.03.2008, 06:03
flash33 вне форума Посмотреть профиль Отправить личное сообщение для flash33 Найти все сообщения от flash33
  № 1  
Ответить с цитированием
flash33
 
Аватар для flash33

Регистрация: Nov 2005
Сообщений: 1,155
По умолчанию CellRenderer в DataGrid

Назрел такой вопрос.
Имею DataGrid с несколькими column содржащими изображения. Пользуюсь для этого классами OneCellRenderer, TwoCellRenderer и т. д подобного вида
Код:
package {
    import fl.containers.UILoader;
    import fl.controls.listClasses.ICellRenderer;
    import fl.controls.listClasses.ListData;
    import fl.core.InvalidationType;
    import fl.data.DataProvider;
    import flash.events.Event;

    public class OneCellRenderer extends UILoader implements ICellRenderer {
        protected var _data:Object;
        protected var _listData:ListData;
        protected var _selected:Boolean;

        public function OneCellRenderer():void {
            super();
        }

        public function get data():Object {
            return _data;
        }
        public function set data(value:Object):void {
            _data = value;
	source = _data.bitmap;
           	trace("воспроизводим изображение 1");
        }
        
		
        public function get listData():ListData {
            return _listData;
        }
        public function set listData(value:ListData):void {
            _listData = value;
            invalidate(InvalidationType.DATA);
            invalidate(InvalidationType.STATE);
        }

        public function get selected():Boolean {
            return _selected;
        }
        public function set selected(value:Boolean):void {
            _selected = value;
            invalidate(InvalidationType.STATE);
        }

       
    }
}
и т п для каждого cellRenderer. Создаем DataGrid, добавляем к его DataProvider в несколько приемов строки: addItem({one:bitmapdata1, two:bitmapdata2}); и т. д. предварительно задав для каждого столбца класс СellRenderer'а... Все работает.
Теперь самое интересное. При перерисовке таблицы (допустим в случае добавления новой строки, прокрутке, выделения строки) должна происходить следуещая вещь - вызов метода invalidate для изменяемой строки с последующим вызовом метода set data в каждом классе CellRenderer'а. В моем случае я должен увидеть дважды по трейсу ("воспроизводим изображение 1" и ("воспроизводим изображение 2" (см. выше в коде) Но не тут то было! Событие invalidate произойдет для ВСЕХ ячеек второго столбца, т.е. для второго класса вызов set data будет повторяться для каждой строки, а не только для перерисовываемой! Если строк много это заметно затормозит флешку.
Вопрос. Как мне поступить, что бы события перерисовки (иначе говоря вызов set data для каждого класса) происходил единожды
Вот тут исходник, если что http://***********/1802406 (320Кб, CS3)


Последний раз редактировалось flash33; 14.03.2008 в 06:16.
Старый 14.03.2008, 07:40
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 2  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
А почему перерисовываются ячейки только второго столбца?
И не по теме: у вас тоже иногда обрауется "зазор" между столбцами? Как с этим бороться

Старый 14.03.2008, 11:30
flash33 вне форума Посмотреть профиль Отправить личное сообщение для flash33 Найти все сообщения от flash33
  № 3  
Ответить с цитированием
flash33
 
Аватар для flash33

Регистрация: Nov 2005
Сообщений: 1,155
Вообще то должны перерисовываться только ячейки в определенной строке. К примеру, по вызову метода DataProvider.invalidateItemA(index) перерисовываться должны ячейки в index строке. Так и происходит для первого столбца. Второй столбец перерисовывается полностью Я конечно могу отследить какая именно строка перерисовывается в данный момент и отсечь ненужное, но это не гут.

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:47.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.