Показать сообщение отдельно
Старый 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.