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

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

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

Регистрация: Oct 2010
Сообщений: 67
По умолчанию Timer-ы в ячейках DataGrid

Имеются несколько таймеров расположенных в ячейках DataGrid
Код AS3:
<mx:DataGrid dataProvider="{arrayData}" >
	<mx:columns>
		<mx:DataGridColumn headerText="Время"	itemRenderer="renderfortimer"	/>
	</mx:columns>
</mx:DataGrid>
Сам рендер состоит из label значение которого изменяются каждую секунду.
Вопрос вот в чем, как мне получить доступ к определенному таймеру, например, остановить его, удалить ?
и попутный вопрос как можно остановить (удалить) все таймеры?


Последний раз редактировалось Lexxx_HU; 26.05.2011 в 18:36.
Старый 27.05.2011, 01:14
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 2  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
1)
вар 1 - в итемрендере определить статический массив для таймеров, при создании итемрендера погружать туда ссылку на таймер и итемрендер, при изменении проверять наличие итемрендера и удалять ссылку
вар 2 - тоже статической поле, но внутри класса наследуемого от Timer, заносить в массив в конструкторе, при работе проверять наличие рабочей ссылки на таймер
2)
такой массив позволит оперировать со всеми таймерами сразу

Старый 27.05.2011, 12:03
Lexxx_HU вне форума Посмотреть профиль Отправить личное сообщение для Lexxx_HU Найти все сообщения от Lexxx_HU
  № 3  
Ответить с цитированием
Lexxx_HU

Регистрация: Oct 2010
Сообщений: 67
в итемрендере делаю
Код AS3:
public static var arrayTimers:ArrayCollection = new ArrayCollection();
//флаг о том найден ли таймер
public var flag:Boolean = false;
public var timerSec:Timer = new Timer(1,1);
override public function set data(value:Object):void {
	super.data = value;
	if (value != null) {
		trace('количество таймеров - '+arrayTimers.length);
		timerSec = new Timer(1000,10);
		for(var i:int = 0; i < arrayTimers.length; i++) {
		if(arrayTimers[i].item_link == this) {
			trace('есть такой таймер');
			flag = true;
			break;
		} else {
			trace('нет такого таймера');
		}
	}
	if (!flag) {
		arrayTimers.addItem({
			item_link:		this,
			timer_link:		timerSec
		});
	}
}
}
вы про такой способ говорили ? а как мы узнаем какая запись массива arrayData к какому таймеру относится ?
и как мне из основного приложения отключить таймер ? не из итемрендера


Последний раз редактировалось Lexxx_HU; 27.05.2011 в 12:09.
Старый 27.05.2011, 12:57
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 4  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
- да, примерно про такой способ

- например итем arrayData в ту же коллекцию сохранять, как и линк на итемРендер
(помните что список arrayData и визуальный список датагрида не совпадают)

- в любом месте приложения виден
Код AS3:
itemRender.arrayTimers

Старый 31.05.2011, 13:46
Lexxx_HU вне форума Посмотреть профиль Отправить личное сообщение для Lexxx_HU Найти все сообщения от Lexxx_HU
  № 5  
Ответить с цитированием
Lexxx_HU

Регистрация: Oct 2010
Сообщений: 67
если в DataGrid появляется скрол, и мы подвигаем вверх-вниз то происходит перестроение рендеров и соответственно таймеры начинают запускаться от первостепенных значений. как можно с этим бороться ?

Старый 31.05.2011, 15:26
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Вы оба пытаетесь подойти к проблеме не с той стороны.
Во-первых, рендереры используются повторно. Т.е. одномоментно, существуют только те рендереры, которые видны. Никто не создает рендереры для всех итемов в dataProvider, это слишком накладно.
Во-вторых, смысл рендерера отображать информацию, а не редактировать ее, максимум послать событие, что с ними что-то вытворяют.

Не занимайтесь ерундой подстановкой костылей. Меняйте данные в dataProvider (итемы в dataProvider должны послать событие PropertyChange или должны быть обозначены как Bindable). Мухи Данные отдельно, котлеты отображение отдельно.

Добавлено через 11 минут
Таймеры создавайте отдельно, для каждого итема и складывайте в массив, либо делайте таймер частью итема.
__________________
משיח לא בא
משיח גם לא מטלפן

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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