Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   как бы хранить нестатическую переменную в imageRenderer? (http://www.flasher.ru/forum/showthread.php?t=130302)

chabapok 23.09.2009 01:45

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

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


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

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

insected 23.09.2009 11:22

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

wvxvw 23.09.2009 11:50

Фишка в том, что сам по себе itemRenderer хранит состояние. Т.е. например, всякие комбо-боксы или чекбоксы которые в нем используются будут оставаться в том состянии, в котором их удалили из дисплей листа. А всякие контролы основаные на ListBase пытаются не создавать новые рендереры, а кешировать старые и их использовать по-новой, например, при скролле. Ну, хотя это и может не очень красиво, но приходится всю такую служебную информацию тоже хранить в data, потому что любое другое решение все равно хуже :)

chabapok 23.09.2009 11:55

да, конечно itemRenderer!

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

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

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

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

Добавлено через 1 минуту
Цитата:

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


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

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