apache-flex Adobe/ApacheFlex:在ActionScript类中修改视图

lo8azlld  于 2022-11-01  发布在  Apache
关注(0)|答案(1)|浏览(179)

我在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();
}

和网络网关实现

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”的方法。

gopyfrb3

gopyfrb31#

根据您的代码,可能有多种方法来解决这个问题。最简单的方法(据我所知)是从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”
希望这对你有帮助。

相关问题