Adobe/Apache Flex:在 ActionScript 中修改视图 class

Adobe/Apache Flex: Modify View in an ActionScript class

我在 Apache/Adobe 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?
    }
}

基本上我想知道一些从 NetworkGatewayImpl 更新 "errorLabel" 的方法。

根据您的代码,可能有多种方法可以解决此问题。最简单的方法(按照我的说法)是从 NetworkGatewayImpl class 调度一个事件并在您在视图 class 中创建的实例上收听它。所以示例代码如下所示:

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 class:

发送您的活动
private function onNetworkError(): void
{
    this.dispatchEvent("networkError");
}

您必须确保您的 NetworkGatewayImpl 也实现了 IEventDispatcher 接口才能调度事件。

此外,最佳做法是创建自定义事件 class(扩展 Event class)并使用常量而不是文字 'networkError'

希望对您有所帮助。