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

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

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

Регистрация: Jul 2009
Сообщений: 240
Записей в блоге: 1
По умолчанию как бы хранить нестатическую переменную в imageRenderer?

у меня в таблице интерактивные элементы, которые меняют своё состояние, генерируют события и тд.

я обнаружил, что все переменные в моем imageRenderer -- как бы статические. Ну, то есть если я например меняю currentState какой-то ячейки, а данных в талбице много, то когда листаешь таблицу ухватившись мышкой за скроллбар, то измененный currentState ячейки попадает в другие, вновь выводящиеся, ячейки.
На уже выведенные, пока они показываются на экране, не влияет - он их как бы отрендерил и "бросил"


Вобщем, все переменные, даже не статические ведут себя как статические. Ну или как
будто imagRenderer -- это один экземпляр. По всей видимости, именно так и есть. Когда он ячейку отрендерил - все ок, но как только он начинает рендерить новую то переменные используются от предыдущей.

переменных data.* мне не хватает. И хранить свои внутренние данные в области data.* не хочется - у меня там просто обьекты лежат, которые определенным образом в другие массивы добавляются и лишние данные будут мешать.

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

Регистрация: Jun 2006
Сообщений: 164
Вы наверное имеете ввиду itemRenderer. ItemRender не должен хранить никакого состояния. Он должен брать входные данные, обрабатывать их и отображать. Все ваши проблемы именно от этого. В общих словах нужно делать так:
1. Получили объект data;
2. Проверили какие нибудь условия;
3. Если выполнились условия отобразили как-то хитро;
4. Если нет, то вернули все переменные и т.д. в начальное состояние.
Вот хорошие статьи на эту тему (4 части): http://www.adobe.com/devnet/flex/art...erers_pt1.html

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Фишка в том, что сам по себе itemRenderer хранит состояние. Т.е. например, всякие комбо-боксы или чекбоксы которые в нем используются будут оставаться в том состянии, в котором их удалили из дисплей листа. А всякие контролы основаные на ListBase пытаются не создавать новые рендереры, а кешировать старые и их использовать по-новой, например, при скролле. Ну, хотя это и может не очень красиво, но приходится всю такую служебную информацию тоже хранить в data, потому что любое другое решение все равно хуже
__________________
Hell is the possibility of sanity

Старый 23.09.2009, 11:55
chabapok вне форума Посмотреть профиль Отправить личное сообщение для chabapok Найти все сообщения от chabapok
  № 4  
Ответить с цитированием
chabapok

Регистрация: Jul 2009
Сообщений: 240
Записей в блоге: 1
да, конечно itemRenderer!

дада. Именно на сайта адоба писали где-то, что можно работать с currentState в itemRenderer.
Там даже примеры были. Только у них у примерах currentState менялся при событиях mouseOver и mouseOut, а они возникают когда ячейка на экране. Хитринькие, я так тоже могу.

а у меня там все сложней. так в двух словах--- при нажатии на элемент он генерирует событие с bubles=true, это событие ловится слушателям, который повешен на всю таблицу. Слушатель отправляет на сервер команду, и определенным образом перезасовывает в другие массивы объект event.target.data
и меняет event.target.currentState. Определенным образом -- это значит, что он копии делает его (mx.utils.objectUtil.copy)

я могу добавить какую-то переменную в структуру dataProvider, от которого будет зависеть currentState, но я очень не хочу это делать -- в других массивах эта копия не нужна как бы.

Наверное, придется удалять из объекта поле с определенным именем, перед тем, как засовывать его в другие массивы.

Добавлено через 1 минуту
Цитата:
Т.е. например, всякие комбо-боксы или чекбоксы которые в нем используются.
О! я придумал! чекбокс невидимый, который хранит currentState


Последний раз редактировалось chabapok; 23.09.2009 в 11:57.
Создать новую тему Ответ Часовой пояс GMT +4, время: 20:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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