Actionscript 3 Adobe/Apache Flex:在ActionScript类中修改视图
我在Apache/Adobe Flex 4中有一个WindowedApplication,它目前由一个视图(WindowedApplication MXML中定义的视图)组成 在那个应用程序中,我有一个监听来自网络的数据的对象。当数据可用时,将在该对象上调用一个方法,该方法将通过更改标签的文本来更新我的视图 不过,我没有对网络侦听器对象中的视图的引用。我怎样才能得到它 这是我定义视图的MXML的一部分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"/>
<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");
}