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

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

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

Регистрация: Nov 2009
Адрес: Минск, Беларусь
Сообщений: 89
Отправить сообщение для chata с помощью ICQ
По умолчанию проблема с cairngorm

Здраствуйте, помогите пожалуйста понять причину. Используется cairngorm2, так вот в одном из случает добавления почему то в Commands дергается несколько раз, а иногла и один execute, хотя вроде как только один dispatchEvent передаем.

Привожу примеры:
View
Код AS1/AS2:
private function saveObject():void{
				if (this.edit)
				{
					targetValueOb.data = inputName.text;
					targetValueEvent=new TargetValueEvent(TargetValueControl.EDIT_TARGET_VALUE, targetValueOb, ownerTarget);
				}
				else
				{
					targetValueOb.data = inputName.text;
					targetValueOb.targetId = ownerTarget.id;
					targetValueEvent=new TargetValueEvent(TargetValueControl.ADD_TARGET_VALUE, targetValueOb, ownerTarget);
				}
 
				CairngormEventDispatcher.getInstance().dispatchEvent(targetValueEvent);
				close();
			}
Command
Код AS1/AS2:
public class TargetValueCommand  extends SequenceCommand  implements Command, Responder
 
....
 
override public function execute(event:CairngormEvent):void
		{
			var delegate : TargetValueDelegate = new TargetValueDelegate(this);
 
			try
			{
				targetValueEvent = TargetValueEvent(event);
				//nextEvent = targetValueEvent.nextChainedEvent;
			}
			catch(err:Error)
			{
				targetValueEvent=null;
			}
 
			if(targetValueEvent!=null)
			{
				myRequest = event.type;
				switch(event.type)
				{
					case TargetValueControl.LOAD_TARGET_VALUE:
						delegate.loadTargetValue();
						break;
					case TargetValueControl.ADD_TARGET_VALUE:
						delegate.addTargetValue(targetValueEvent.targetValueOb);
						break;
					case TargetValueControl.EDIT_TARGET_VALUE:
						delegate.editTargetValue(targetValueEvent.targetValueOb);
						break;
					case TargetValueControl.REMOVE_TARGET_VALUE:
						delegate.removeTargetValue(targetValueEvent.targetValueOb)
				}
			}
		}
Спасибо.

Добавлено через 44 минуты
может это имеет значение, view в котором можем делать сохранение вызывается из таблицы при двойном клике на поле, так вот замечено что когда первый раз вызываем его то добавляет 1 элемент, когда второй то 2 элемента, когда третий - 3 и тд

Привожу пример создания view:
Код AS1/AS2:
private function targetValueCED(e:Event):void{
				var popUp:TargetValueView = TargetValueView(PopUpManager.createPopUp(this,TargetValueView,true));
				popUp.targetOb = targetDataGrid.selectedItem as TargetVO;
				popUp.x=this.width/2 - popUp.width/2 + 40;
				popUp.y=this.height/2 - popUp.height/2;
			}


Последний раз редактировалось chata; 12.03.2011 в 18:57.
Старый 14.03.2011, 10:43
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Посмотрите, не вызывается ли функция (выше по стеку) из каких-нибудь биндинг-выражений. Биндинги имеют два неприятных свойства - игнорировать ошибки и повторно вызывать функцию, если она завершилась с ошибкой в прошлый раз.

А вообще, за такой код надо из зарплаты вычитать
Код AS3:
override public function execute(event:CairngormEvent):void
		{
			var delegate : TargetValueDelegate = new TargetValueDelegate(this);
 targetValueEvent = event as TargetValueEvent;
			//try
			//{
				//targetValueEvent = TargetValueEvent(event);
				//nextEvent = targetValueEvent.nextChainedEvent;
			//}
			//catch(err:Error)
			//{
				//targetValueEvent=null;
			//}
 if (targetValueEvent)
			//if(targetValueEvent!=null)
			{
// Порочная логика, никогда так не делайте, подпишите по слушателю на событие, 
// либо используйте state, либо strategy. Старайтесь избегать switch, тем более, 
// что тут он совершенно ни к чему и только усложняет тестирование.
				myRequest = event.type;
				switch(event.type)
				{
					case TargetValueControl.LOAD_TARGET_VALUE:
						delegate.loadTargetValue();
						break;
					case TargetValueControl.ADD_TARGET_VALUE:
						delegate.addTargetValue(targetValueEvent.targetValueOb);
						break;
					case TargetValueControl.EDIT_TARGET_VALUE:
						delegate.editTargetValue(targetValueEvent.targetValueOb);
						break;
					case TargetValueControl.REMOVE_TARGET_VALUE:
						delegate.removeTargetValue(targetValueEvent.targetValueOb)
				}
			}
		}
__________________
Hell is the possibility of sanity

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

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

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


 


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


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