Adobe / Apache Flex:在ActionScript类

时间:2017-01-04 13:16:32

标签: actionscript-3 flex air flex4 mxml

我在Apache / Adob​​e Flex 4中有一个WindowedApplication,它目前包含一个视图(WindowedApplication MXML中定义的视图)。

在该应用程序中,我有一个侦听来自网络的数据的对象。当数据可用时,会在该对象上调用一个方法,它将通过更改标签的文本来更新我的视图。

我没有对网络侦听器对象中的视图的引用。我怎么能得到它?

这是我定义视图的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?
    }
}

基本上我想知道一些更新的方法&#34; errorLabel&#34;来自NetworkGatewayImpl。

1 个答案:

答案 0 :(得分: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类(扩展Event类)并使用常量而不是文字'networkError'

希望这有帮助。