![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
у меня в таблице интерактивные элементы, которые меняют своё состояние, генерируют события и тд.
я обнаружил, что все переменные в моем imageRenderer -- как бы статические. Ну, то есть если я например меняю currentState какой-то ячейки, а данных в талбице много, то когда листаешь таблицу ухватившись мышкой за скроллбар, то измененный currentState ячейки попадает в другие, вновь выводящиеся, ячейки. На уже выведенные, пока они показываются на экране, не влияет - он их как бы отрендерил и "бросил" Вобщем, все переменные, даже не статические ведут себя как статические. Ну или как будто imagRenderer -- это один экземпляр. По всей видимости, именно так и есть. Когда он ячейку отрендерил - все ок, но как только он начинает рендерить новую то переменные используются от предыдущей. переменных data.* мне не хватает. И хранить свои внутренние данные в области data.* не хочется - у меня там просто обьекты лежат, которые определенным образом в другие массивы добавляются и лишние данные будут мешать. |
|
|||||
|
Регистрация: Jun 2006
Сообщений: 164
|
Вы наверное имеете ввиду itemRenderer. ItemRender не должен хранить никакого состояния. Он должен брать входные данные, обрабатывать их и отображать. Все ваши проблемы именно от этого. В общих словах нужно делать так:
1. Получили объект data; 2. Проверили какие нибудь условия; 3. Если выполнились условия отобразили как-то хитро; 4. Если нет, то вернули все переменные и т.д. в начальное состояние. Вот хорошие статьи на эту тему (4 части): http://www.adobe.com/devnet/flex/art...erers_pt1.html |
|
|||||
|
Modus ponens
|
Фишка в том, что сам по себе itemRenderer хранит состояние. Т.е. например, всякие комбо-боксы или чекбоксы которые в нем используются будут оставаться в том состянии, в котором их удалили из дисплей листа. А всякие контролы основаные на ListBase пытаются не создавать новые рендереры, а кешировать старые и их использовать по-новой, например, при скролле. Ну, хотя это и может не очень красиво, но приходится всю такую служебную информацию тоже хранить в data, потому что любое другое решение все равно хуже
![]()
__________________
Hell is the possibility of sanity |
|
|||||
|
да, конечно itemRenderer!
дада. Именно на сайта адоба писали где-то, что можно работать с currentState в itemRenderer. Там даже примеры были. Только у них у примерах currentState менялся при событиях mouseOver и mouseOut, а они возникают когда ячейка на экране. Хитринькие, я так тоже могу. а у меня там все сложней. так в двух словах--- при нажатии на элемент он генерирует событие с bubles=true, это событие ловится слушателям, который повешен на всю таблицу. Слушатель отправляет на сервер команду, и определенным образом перезасовывает в другие массивы объект event.target.data и меняет event.target.currentState. Определенным образом -- это значит, что он копии делает его (mx.utils.objectUtil.copy) я могу добавить какую-то переменную в структуру dataProvider, от которого будет зависеть currentState, но я очень не хочу это делать -- в других массивах эта копия не нужна как бы. Наверное, придется удалять из объекта поле с определенным именем, перед тем, как засовывать его в другие массивы. Добавлено через 1 минуту Цитата:
Последний раз редактировалось chabapok; 23.09.2009 в 11:57. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|