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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.07.2010, 19:57
vasyapunk вне форума Посмотреть профиль Отправить личное сообщение для vasyapunk Найти все сообщения от vasyapunk
  № 1  
Ответить с цитированием
vasyapunk
[+6 25.07.10]

Регистрация: Sep 2009
Сообщений: 35
По умолчанию ItemEditEnd для DataGrid

Почему если поставить для DataGrid функцию на событие ItemEditEnd, то эта функция срабатывает несколько раз?
Вот мой mxml:
Код AS3:
<mx:DataGrid rowCount="8" 
			sortableColumns="false" 
			id="yearGrig" dataProvider="{buildGridData}"
			height="100%" editable="true" itemEditEnd="onItemEditEnd(event)">
			<mx:columns>
				<mx:DataGridColumn headerText="Description\Year" dataField="label" width="160" 
					backgroundColor="#CCCCC9"
					textAlign="right" fontWeight="bold" editable="false"
					/>
				<mx:DataGridColumn headerText="" width="90" editable="true"
					id="yearMinusTwu" dataField="yearMinusTwo" labelFunction="format"/>
				<mx:DataGridColumn headerText="" width="90" editable="true"
					id="yearMinusOne" dataField="yearMinusOne" labelFunction="format"/>
				<mx:DataGridColumn headerText="" width="90" editable="true"
					id="todayYear" dataField="todayYear" labelFunction="format"/>
				<mx:DataGridColumn headerText="" width="90" editable="true" 
					id="yearPlusOne" dataField="yearPlusOne" labelFunction="format"/>
				<mx:DataGridColumn headerText="" width="90" editable="true"
					id="yearPlusTwu" dataField="yearPlusTwo" labelFunction="format"/>
			</mx:columns>
		</mx:DataGrid>
И скрипт к нему:
Код AS3:
private function onItemEditEnd(event:DataGridEvent):void{
			var currentColumn:String;
			if(event.columnIndex==1){
				currentColumn="yearMinusTwu";
			}else if(event.columnIndex==2){
				currentColumn="yearMinusOne";
			}else if(event.columnIndex==3){
				currentColumn="todayYear";
			}else if(event.columnIndex==4){
				currentColumn="yearPlusOne";
			}else if(event.columnIndex==5){
				currentColumn="yearPlusTwu";
			}			
			Alert.show(buildGridData[event.rowIndex]['label'].toString()+' = '+buildGridData[event.rowIndex][currentColumn].toString());
 
			event.preventDefault();
			yearGrig.destroyItemEditor();
		}
Вот тот алерт выполняется сейчас 3 раза.Почему?
Если кто с таким сталкивался, помогите плиз)

Старый 30.07.2010, 23:50
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 2  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
И все три события с одним и тем же таргетом?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

Регистрация: Jan 2010
Сообщений: 211
Может, язык не очень стелется в силу слабой теоретической подготовки, но причину вижу четко, так как сам в свое время наигрался с эдитами и рендерами, что и попытаюсь объяснить ...

К моменту вызова алерта строка находится в режиме редактирования (дестрой еще не наступил); напомню - это строка из коллекции, готорая гарантированно биндится. И в самом алерте происходит обращение к этой коллекции. При попытке получить значение поле (в первом случае "label", во втором - currentColumn) коллекция пытается получить значение поля редактируемой строки, что без "сброса" редактирования нельзя. Поэтому вызывается эвент окончания редактирования. В алерте два обращения - будет два повтора вызова функции.

Если поставить алерт после удаления эдитора, такой проблемы не будет.

P.S. Я сейчас не вспомню, в чем была загвоздка, но точно помню, что если event.preventDefault() вызван до дестроя эдитора, то что-то шло не так. Конечно, необъективно, но зерно в этом есть.

Старый 02.08.2010, 11:56
vasyapunk вне форума Посмотреть профиль Отправить личное сообщение для vasyapunk Найти все сообщения от vasyapunk
  № 4  
Ответить с цитированием
vasyapunk
[+6 25.07.10]

Регистрация: Sep 2009
Сообщений: 35
да)оно так и было)поменял все местами
Код AS3:
yearGrig.destroyItemEditor();
event.preventDefault();
Alert.show(event.dataField+' = '+buildGridData[event.rowIndex]['label'].toString()+' = '+buildGridData[event.rowIndex][currentColumn].toString());
и теперь вызывается алерт 1 раз)

спасибо большое)

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

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

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


 


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


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