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

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

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

Регистрация: Apr 2008
Сообщений: 5
Question Почему событие itemEditEnd в DataGrid посылается 2 раза?

Почему событие itemEditEnd в DataGrid при окончании редактирования ячейки посылается 2 раза? Причем объект event в обоих случаях совершенно одинаков.
Нужно при окончании редактирования ячейки сохранить результат в базе, в итоге происходит 2 запроса к базе, не оптимально. Есть способ отлавливать это событие только один раз?

Старый 03.04.2008, 14:29
baron27 вне форума Посмотреть профиль Отправить личное сообщение для baron27 Посетить домашнюю страницу baron27 Найти все сообщения от baron27
  № 2  
Ответить с цитированием
baron27
Контрибьютор базы знаний по Флекс
 
Аватар для baron27

Регистрация: Aug 2005
Сообщений: 690
там нужно проверять при наступлении
Код:
if (event.reason == DataGridEventReason.OTHER || event.reason == DataGridEventReason.CANCELLED)
{
    return;
}
Насколько я разобрался, ситуация там следующая. Событие наступает тогда, когда ячейка теряет фокус по следующим причинам (DataGridEventReason):
CANCELLED - редактирование отменено (нажат Esc)
NEW_COLUMN - по окончанию редактирования фокус ушел на соседнюю колонку этого ряда.
NEW_ROW - фокус ушел на новый ряд этой колонки.
OTHER - То есть просто потерян фокус, произошло скроллирование или был переход в состояние, в котором редактирование не допущено.

Значит, что за одно редактирование у нас событие может случиться 2 раза: при NEW_COLUMN или NEW_ROW и OTHER.
__________________
Flex 2 и Co


Последний раз редактировалось baron27; 03.04.2008 в 14:44.
Старый 03.04.2008, 16:18
undr вне форума Посмотреть профиль Отправить личное сообщение для undr Найти все сообщения от undr
  № 3  
Ответить с цитированием
undr

Регистрация: Apr 2008
Сообщений: 5
Да это я знаю, но оба события имеют причину OTHER (они вообще абсолютно одинаковы)
Просто если пользователь изменил данные и ткнул мышью в любое место, программа должна сохранить значение. Поэтому у меня стоит только:
Код:
if (event.reason == DataGridEventReason.CANCELLED) {
    return;
}
В итоге посылаются два абсолютно одинаковых события. Почему?

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

Регистрация: Apr 2008
Сообщений: 5
Если я сохраню результат и вызову event.stopImmediatePropagation(), событие повторится?
Код:
if (event.reason == DataGridEventReason.CANCELLED) {
    return;
}

saveItemToDatabase();

event.stopImmediatePropagation();

Старый 04.04.2008, 13:12
baron27 вне форума Посмотреть профиль Отправить личное сообщение для baron27 Посетить домашнюю страницу baron27 Найти все сообщения от baron27
  № 5  
Ответить с цитированием
baron27
Контрибьютор базы знаний по Флекс
 
Аватар для baron27

Регистрация: Aug 2005
Сообщений: 690
насколько я понял, да. У решил эту ситуацию вышеприведенным способом. У меня уходило 2 события при нажатии ENTER после редактирования - одно связано с переходом на новую строку/столбец, другое - с потерей фокуса (OTHER). Почему у тебя 2 раза получается OTHER?
__________________
Flex 2 и Co

Старый 04.04.2008, 16:40
undr вне форума Посмотреть профиль Отправить личное сообщение для undr Найти все сообщения от undr
  № 6  
Ответить с цитированием
undr

Регистрация: Apr 2008
Сообщений: 5
Похоже что событие отсылается дважды, если в код поставить Alert.show(). Именно в момент вызова Alert.show() вызывается это же сообщение еще раз, прирывая выполнение обработчика текущего события. Вызов Alert.show() при не завершенной обработке события itemEditEnd, провоцирует срабатывание этого же события еще раз.
Если я ставлю trace(event.reason), то событие отрабатывает один раз. Интересно что еще может спровацировать повторную отправку события?


Последний раз редактировалось undr; 04.04.2008 в 18:12.
Создать новую тему Ответ Часовой пояс GMT +4, время: 14:59.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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