2017-01-04 13 views
1

現在、1つのビュー(WindowedApplication MXMLで定義されたビュー)で構成されるApache/Adob​​e Flex 4にWindowedApplicationがあります。Adob​​e/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

ありがとう、これは動作します。残りの1つの質問:イベントを受け取った後、なぜネットワークガイダンスからイベントリスナーを削除するのですか? – user975561

+0

答えを受け入れてくれてありがとう。イベントリスナーの削除は単なるベストプラクティスです。ガベージコレクタのオブジェクトを解放するのに役立ちます。また、この場合、何らかの理由でgetStatusメソッドが再度呼び出された場合、複数のイベントリスナーが追加され、removeラインがない場合は削除されません。ウィークイベントリスナーでも読み上げることができます。 –

関連する問題