2017-01-04 20 views
1

我在Apache/Adob​​e Flex 4中有一个WindowedApplication,它目前由一个视图(在WindowedApplication MXML中定义的视图)组成。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

谢谢,这个作品。剩下的一个问题:在收到事件后,为什么要从网络网关移除事件监听器? – user975561

+0

感谢您接受答案。事件监听器的移除只是最佳实践。它有助于为垃圾回收器释放对象。另外,在这种情况下,如果由于某种原因再次调用getStatus方法,我们最终会添加多个事件侦听器,并且如果删除行不在那里,则永远不会删除它们。您还可以阅读弱事件监听器。 –