![]() |
как бы хранить нестатическую переменную в imageRenderer?
у меня в таблице интерактивные элементы, которые меняют своё состояние, генерируют события и тд.
я обнаружил, что все переменные в моем imageRenderer -- как бы статические. Ну, то есть если я например меняю currentState какой-то ячейки, а данных в талбице много, то когда листаешь таблицу ухватившись мышкой за скроллбар, то измененный currentState ячейки попадает в другие, вновь выводящиеся, ячейки. На уже выведенные, пока они показываются на экране, не влияет - он их как бы отрендерил и "бросил" Вобщем, все переменные, даже не статические ведут себя как статические. Ну или как будто imagRenderer -- это один экземпляр. По всей видимости, именно так и есть. Когда он ячейку отрендерил - все ок, но как только он начинает рендерить новую то переменные используются от предыдущей. переменных data.* мне не хватает. И хранить свои внутренние данные в области data.* не хочется - у меня там просто обьекты лежат, которые определенным образом в другие массивы добавляются и лишние данные будут мешать. |
Вы наверное имеете ввиду itemRenderer. ItemRender не должен хранить никакого состояния. Он должен брать входные данные, обрабатывать их и отображать. Все ваши проблемы именно от этого. В общих словах нужно делать так:
1. Получили объект data; 2. Проверили какие нибудь условия; 3. Если выполнились условия отобразили как-то хитро; 4. Если нет, то вернули все переменные и т.д. в начальное состояние. Вот хорошие статьи на эту тему (4 части): http://www.adobe.com/devnet/flex/art...erers_pt1.html |
Фишка в том, что сам по себе itemRenderer хранит состояние. Т.е. например, всякие комбо-боксы или чекбоксы которые в нем используются будут оставаться в том состянии, в котором их удалили из дисплей листа. А всякие контролы основаные на ListBase пытаются не создавать новые рендереры, а кешировать старые и их использовать по-новой, например, при скролле. Ну, хотя это и может не очень красиво, но приходится всю такую служебную информацию тоже хранить в data, потому что любое другое решение все равно хуже :)
|
да, конечно itemRenderer!
дада. Именно на сайта адоба писали где-то, что можно работать с currentState в itemRenderer. Там даже примеры были. Только у них у примерах currentState менялся при событиях mouseOver и mouseOut, а они возникают когда ячейка на экране. Хитринькие, я так тоже могу. а у меня там все сложней. так в двух словах--- при нажатии на элемент он генерирует событие с bubles=true, это событие ловится слушателям, который повешен на всю таблицу. Слушатель отправляет на сервер команду, и определенным образом перезасовывает в другие массивы объект event.target.data и меняет event.target.currentState. Определенным образом -- это значит, что он копии делает его (mx.utils.objectUtil.copy) я могу добавить какую-то переменную в структуру dataProvider, от которого будет зависеть currentState, но я очень не хочу это делать -- в других массивах эта копия не нужна как бы. Наверное, придется удалять из объекта поле с определенным именем, перед тем, как засовывать его в другие массивы. Добавлено через 1 минуту Цитата:
|
| Часовой пояс GMT +4, время: 12:18. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.