【问题标题】:Adobe/Apache Flex: Modify View in an ActionScript classAdobe/Apache Flex:在 ActionScript 类中修改视图
【发布时间】:2017-01-04 13:16:31
【问题描述】:

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

【问题讨论】:

  • 请发布一些代码,让我们确切知道您面临的问题?
  • 添加了相关代码。

标签: actionscript-3 apache-flex air flex4 mxml


【解决方案1】:

根据您的代码,可能有多种方法可以解决此问题。最简单的方法(根据我)是从 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”

希望这会有所帮助。

【讨论】:

  • 谢谢,这行得通。剩下的一个问题:为什么在收到事件后从 networkGateway 中移除事件监听器?
  • 感谢您的回答。删除事件侦听器只是一种最佳做法。它有助于为垃圾收集器释放对象。此外,在这种情况下,如果由于某种原因再次调用 getStatus 方法,我们最终会添加多个事件侦听器,并且如果删除行不存在,则永远不会删除它们。您还可以阅读弱事件侦听器。
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 2010-10-26
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 2023-04-02
  • 2011-09-14
相关资源
最近更新 更多