2012-05-11 2 views
1

루프 내에서 RemoteObject 메소드를 호출합니다. 이 메서드는 데이터베이스에서 행을 삭제하는 매개 변수로 행 ID를받습니다. 루프 안에서 많은 호출이 동시에 이루어질 수있었습니다. 일부 호출은 FaultEvent를 발생시킬 수 있습니다. FaultEvent를 발생시킨 행 ID를 어떻게 검색합니까?Flex - FaultEvent가 트리거 될 때 RemoteObject 호출에 전달 된 매개 변수를 얻는 방법?

RemoteObject는 :

<mx:RemoteObject id="myTableFactory" destination="myTableFactoryFactory"/>

루프 :

myTableFactory.addEventListener(FaultEvent.FAULT, faultFunction); 
for each (var myTableRow:myTable in rowsToBeExcludedArray) 
{ 
    myTableFactory.removeMyTableRow(myTableRow.id); 
} 

private function faultFunction(e:FaultEvent):void 
{ 
    // The main question. How to get myTableRow.id that fired the FaultEvent 
} 

감사합니다.

카를로스 리마.

답변

1

반드시 AsyncToken을 읽어야합니다.

RemoteObject에에 모든 원격 프로 시저 호출 하나를 반환합니다

var token:AsyncToken = myTableFactory.removeMyTableRow(myTableRow.id); 

이제이 토큰으로 할 수있는 두 가지가 있습니다.

당신에게 각 통화에 대한 고유 핸들러가 할 수있는 가능성을 제공합니다 당신은 각 통화에 Responder를 추가 할 수 있습니다 응답자

, 추가

token.addResponder(new Responder(handleResult, handleFault)); 

하는 글로벌 결과를 제거하십시오를 및 장애 처리기를 시도하기 전에. 또한 여기서는 기본 Responder 클래스를 사용했지만 어떤 클래스는 IResponder을 구현할 것입니다.

귀하의 ID

피기 백은 동적 클래스이기 때문에 당신은 토큰에 새 속성을 추가 할 수 있습니다. 예를 들어 id 편리 여기에 올 수

token.removedId = myTableRow.id; 

아니면 심지어는 전체 클래스 :

token.removedRow = myTableRow; 

지금 당신이 이벤트 핸들러에서 이러한 값을 찾을 수 있습니다

private function handleResult(event:ResultEvent):void { 
    trace(event.token.removedId); 
} 

을 같은 원칙이 적용됩니다 FaultEvent

+0

+1 ID를 피기 백에 제안 해주세요.필요한 것처럼 들립니다. 그리고 전에 생각하지 못했던 ASyncToken을 창의적으로 사용했습니다. – JeffryHouser

0

마음에 들지 않으면 당신의 AsyncToken을 뒷받침하는 돼지의 아이디어 (그리고 나는 때때로 비실용적이다.)를 사용하면 원래 요청의 세부 사항을 아주 쉽게 검색 할 수있다.

이 기술은 BlazeDS에서 DuplicateSessionDetected 오류가 발생하여 클라이언트 ID를 null로 만들고 원래 요청을 다시 발행 할 때 사용합니다.

private function handleFault(event:FaultEvent):void 
{ 
    const remoteObject:RemoteObject = (event.target as RemoteObject); 
    const message:RemotingMessage = (event.token.message as RemotingMessage); 

    message.clientId = null; 
    remoteObject.getOperation(message.operation) 
     .send.apply(null, message.body); 
} 

희망 하시겠습니까?