我在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?
}
}
基本上我想知道一些更新的方法&#34; errorLabel&#34;来自NetworkGatewayImpl。
答案 0 :(得分: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类(扩展Event
类)并使用常量而不是文字'networkError'
希望这有帮助。