2017-01-04 21 views
1

현재 하나의보기 (WindowedApplication MXML에 정의 된보기)로 구성된 Apache/Adobe Flex 4에 WindowedApplication이 있습니다.Adobe/Apache Flex : ActionScript 클래스에서보기 수정

해당 응용 프로그램에는 네트워크에서 들어오는 데이터를 수신하는 개체가 있습니다. 데이터가 사용 가능할 때 그 객체에 대해 메소드가 호출되고 레이블의 텍스트를 변경하여 내보기를 업데이트합니다.

네트워크 수신기 개체의보기에 대한 참조가 없습니다. 그것을 어떻게 얻을 수 있습니까?

내보기를 정의하는 MXML의 일부입니다.

<fx:Script source="./ViewCodeBehind.as"/> 

<!-- ommited stuff --> 

<s:Label id="errorLabel" 
    text="" 
    fontSize="14"/> 

<!-- Stuff in between --> 

<s:Button label="Get Status" 
     click="getStatus();"/> 

버튼을 클릭 할 때 호출되는 코드 :

public function getStatus(): void 
{ 
    var networkGateway: NetworkGateway = new NetworkGatewayImpl(); 
    networkGateway.getConnectionStatus(); 
} 

그리고 NetworkGatewayImpl

public class NetworkGatewayImpl implements NetworkGateway 
{ 
    public function NetworkGatewayImpl() 
    { 
    } 

    public function getConnectionStatus(): void 
    { 
     // Start asynchronous network call 
     // when error occurs onNetworkError() is called 
    } 

    private function onNetworkError(): void 
    { 
     // Set "errorLabel" here: How? 
    } 
} 

기본적으로 나는 NetworkGatewayImpl에서 "errorLabel"를 업데이트하는 몇 가지 방법을 알고 싶어요 .

+0

일부 코드를 게시하여 문제가 발생한 정확한 위치를 알려주십시오. –

+0

관련 코드를 추가했습니다. – user975561

답변

2

코드에 따라이 문제를 해결할 수있는 방법은 여러 가지가있을 수 있습니다. 가장 쉬운 방법은 (나에게) NetworkGatewayImpl 클래스의 이벤트를 보내고 뷰 클래스에서 만든 인스턴스에서 수신 대기하는 것입니다. 그래서 샘플 코드는 다음과 같습니다

public function getStatus(): void 
{ 
    var networkGateway: NetworkGateway = new NetworkGatewayImpl(); 
    networkGateway.addEventListener("networkError", onNetworkError); 
    networkGateway.getConnectionStatus(); 
} 

private function onNetworkError(e:Event):void 
{ 
    networkGateway.removeEventListener("networkError", onNetworkError); 
    this.errorLabel.text = "Your Text Here"; 
} 

이 같은 이벤트를 파견하여 NetworkGatewayImpl 클래스 :

private function onNetworkError(): void 
{ 
    this.dispatchEvent("networkError"); 
} 

당신은 당신의 NetworkGatewayImpl도 파견 할 수 있도록 IEventDispatcher 인터페이스를 구현하도록해야합니다 이벤트.

또한, 가장 좋은 방법은합니다 (Event 클래스를 확장) 사용자 정의 이벤트 클래스를 생성하고 대신이 도움이 문자 그대로 'networkError'

희망의 상수를 사용하는 것입니다.

+0

고맙습니다. 하나 남은 질문 : 왜 이벤트를받은 후에 networkGateway에서 이벤트 리스너를 제거합니까? – user975561

+0

답변을 수락 해 주셔서 감사합니다. 이벤트 수신기 제거는 모범 사례 일뿐입니다. 그것은 가비지 컬렉터에 대한 객체를 해제하는 데 도움이됩니다. 또한이 경우 어떤 이유로 든 getStatus 메소드가 다시 호출되면 결국 여러 개의 이벤트 리스너가 추가되고 제거 라인이 없으면 제거되지 않습니다. 약한 이벤트 리스너를 읽을 수도 있습니다. –