Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 Adobe/Apache Flex:在ActionScript类中修改视图_Actionscript 3_Apache Flex_Air_Flex4_Mxml - Fatal编程技术网

Actionscript 3 Adobe/Apache Flex:在ActionScript类中修改视图

Actionscript 3 Adobe/Apache Flex:在ActionScript类中修改视图,actionscript-3,apache-flex,air,flex4,mxml,Actionscript 3,Apache Flex,Air,Flex4,Mxml,我在Apache/Adobe Flex 4中有一个WindowedApplication,它目前由一个视图(WindowedApplication MXML中定义的视图)组成 在那个应用程序中,我有一个监听来自网络的数据的对象。当数据可用时,将在该对象上调用一个方法,该方法将通过更改标签的文本来更新我的视图 不过,我没有对网络侦听器对象中的视图的引用。我怎样才能得到它 这是我定义视图的MXML的一部分 <fx:Script source="./ViewCodeBehind.as"/>

我在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();"/>
以及网络网关impl

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
类发送事件,并在您在view类中创建的实例上侦听它。因此示例代码如下所示:

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
接口,以便能够调度事件

此外,最佳做法是创建一个自定义事件类(扩展
事件
类),并使用常量而不是文字“networkError”


希望这有帮助。

请发布一些代码,让我们知道您面临的问题的确切位置?添加了相关代码。谢谢,这很有效。还有一个问题:为什么在收到事件后要从networkGateway中删除事件侦听器?感谢您接受答案。移除事件侦听器只是一种最佳实践。它有助于释放垃圾收集器的对象。此外,在这种情况下,如果出于某种原因再次调用getStatus方法,我们将最终添加多个事件侦听器,并且如果不存在remove行,就永远不会删除它们。您还可以阅读弱事件侦听器。
private function onNetworkError(): void
{
    this.dispatchEvent("networkError");
}