Adobe/Apache Flex:在 ActionScript 中修改视图 class
Adobe/Apache Flex: Modify View in an ActionScript class
我在 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" 的方法。
根据您的代码,可能有多种方法可以解决此问题。最简单的方法(按照我的说法)是从 NetworkGatewayImpl
class 调度一个事件并在您在视图 class 中创建的实例上收听它。所以示例代码如下所示:
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
class:
发送您的活动
private function onNetworkError(): void
{
this.dispatchEvent("networkError");
}
您必须确保您的 NetworkGatewayImpl
也实现了 IEventDispatcher
接口才能调度事件。
此外,最佳做法是创建自定义事件 class(扩展 Event
class)并使用常量而不是文字 'networkError'
希望对您有所帮助。
我在 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" 的方法。
根据您的代码,可能有多种方法可以解决此问题。最简单的方法(按照我的说法)是从 NetworkGatewayImpl
class 调度一个事件并在您在视图 class 中创建的实例上收听它。所以示例代码如下所示:
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
class:
private function onNetworkError(): void
{
this.dispatchEvent("networkError");
}
您必须确保您的 NetworkGatewayImpl
也实现了 IEventDispatcher
接口才能调度事件。
此外,最佳做法是创建自定义事件 class(扩展 Event
class)并使用常量而不是文字 'networkError'
希望对您有所帮助。