|
|
|||||
проблема с cairngorm
Здраствуйте, помогите пожалуйста понять причину. Используется cairngorm2, так вот в одном из случает добавления почему то в Commands дергается несколько раз, а иногла и один execute, хотя вроде как только один dispatchEvent передаем.
Привожу примеры: View 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(); } 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: 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. |
|
|||||
Modus ponens
|
Посмотрите, не вызывается ли функция (выше по стеку) из каких-нибудь биндинг-выражений. Биндинги имеют два неприятных свойства - игнорировать ошибки и повторно вызывать функцию, если она завершилась с ошибкой в прошлый раз.
А вообще, за такой код надо из зарплаты вычитать 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. |
|
« Предыдущая тема | Следующая тема » |
|
|