2013-04-18 5 views
0

서비스 요청을 실행하는 명령이 있습니다. 결과 처리기에서 결과 데이터를 기반으로 일부 논리를 수행하고 있습니다. 논리가 특정 기준을 충족하는 경우 확인 팝업이 표시됩니다. 사용자가 확인 팝업에서 계속 버튼을 클릭하면 파슬리 이벤트를 전달하는 메소드가 호출됩니다. 파슬리 사건은 잡히지 않았습니다. 그러나 결과 메서드 내부에서 파슬리 이벤트를 전달하면 잡히게됩니다. 결과 메서드 외부에서 이벤트를 디스패치 할 때 이벤트가 포착되지 않는 이유는 무엇입니까? 예를 들어 플렉스 - 파슬리 - 이벤트가 결과 핸들러의 메소드에서 전달되지 않습니다

...

[MessageDispatcher] 
[Bindable] 
public var dispatcher:Function; 

내가 명령 내부에서 일부 서비스 호출을 실행 :

public function result(data:Object):void 
{ 
if (add some logic here based off data) 
AlertHelper.showContinueQuestion(onSelection, "Are you sure you want to continue?"); 
} 

경우 :

public function execute(event:SomeEvent):AsyncToken 
{ 
return service.callService(event.type, false); 
} 

는 지금과 같은 결과 핸들러가 사용자가 확인 팝업에서 Continue 버튼을 클릭하면 onSelection 메서드가 호출됩니다.

private function onSelection():void 
{ 
dispatcher(new SomeEvent(SomeEvent.UPLOAD)); 
} 

파슬리 이벤트, SomeEvent가 잡히지 않았습니다. 그러나 if 문 다음에 해당 이벤트를 전달하면 잡히고 잘 작동합니다. 왜 결과 처리기 외부에서 파견 될 때 잡히지 않는지? 나는 다른 명령들도 시도해 보았고 똑같은 일을한다.

+0

SomeEvent를 잡아 내야하는 처리기와 첨부 된 부분을 볼 수 있습니까? –

+0

이것은 아마도 결과 처리기가 실행을 마자 마자 파슬리 컨텍스트에서 제거되는 동적 명령과 관련이 있습니다. 이상하게 들리지만, 삽입 된 [MessageDispatcher]가 여전히 이벤트를 전달할 수 있다고 추측했을 것입니다 ... onSelection() 메소드가 호출되고 dispatcher가 null이 아닌지 확인할 수 있습니까? 일반적으로 경고를 트리거하는 별도의 명령을 사용합니다. 즉, 결과 처리기에서 "경고 표시"이벤트를 발송합니다. "show alert"명령은'AsyncToken'을 반환 할 수 있고 자체 결과 핸들러를 가질 수 있습니다. –

+0

앤드류, 나는 DynamicCommand를 포함하는 구성 파일을 사용하고 있습니다 : anad2312

답변

1

Spicefactory 사이트에서 발견 된 설계대로 작동합니다. 나는 이벤트를 디스패치하는 것보다 Model에서 플래그를 업데이트하는 것을 끝내었다. 그런 다음 BindSetter에서 모델의 해당 플래그에 대한 변경 사항을 수신 대기합니다. 플래그가 true로 설정되면 Parsley 이벤트가 전달됩니다.

별도로 실행 방법 및 결과 처리기 DynamicCommand 그룹화에서 명령 개체의 수명주기는 명령 개체에 대한 수명주기 관리의 특별한 종류를 소개합니다. 일치하는 메시지가 발송 될 때까지 객체 생성이 수행되지 않습니다. 그런 다음 명령 실행 기간 동안 컨테이너 관리 객체가됩니다. 결과 또는 오류 핸들러가 호출 된 후 즉시 컨텍스트에서 제거됩니다. 그러나 평생 동안이 개체는 완전히 관리되는 개체이거나 종속성을 주입 할 수 있으며 명령 실행 중에 메시징에 참여할 수도 있습니다. 그러나 이것은 드문 경우이지만 가장 일반적인 사용 시나리오는 명령을 실행하는 데 필요한 모든 종속성을 수신하는 명령 개체 일 것입니다.