我有一个使用blazeDS的Flex/Java项目。现在我有了一个actionscript文件,它调用了另一个actionscript的方法,这个actionscript文件调用了remoteObject (对db进行简单选择的java类)。
代码如下:
Home.as
..
private var _dm:DataManager = new DataManager;
public function getPerson():void { // this is connect to a button in .mxml
_dm.getPerson();
}
..DataManager.as
public class DataManager {
private var _service:RemoteObject;
private var _url:URLRequest;
private var loCs:ChannelSet = new ChannelSet();
public function DataManager () {
_service = new RemoteObject("PeopleDAO");
loCs.addChannel(new AMFChannel("canale", "http://localhost:8080/FlexTRYOUT/messagebroker/amf"));
_service.channelSet = loCs;
}
private function onFault(event:FaultEvent,token:Object):void {
var _fail:String = "fault";
}
private function onResult(event:ResultEvent,token:Object):void {
per = event.result as People; // is a bean class
Alert.show(per.nome);
}
public function getPerson():void {
var token:AsyncToken = _service.getPersona();
token.addResponder(new AsyncResponder(onResult,onFault));
}
}这个调用运行得很好,它调用DataManger.java类的java方法名getPerson()。它只返回一个带有名字和姓氏对象(这只是一个了解这个该死的AsyncCall的问候世界)。问题是我不知道如何使用经典(java)返回类型将结果发送到Home.as。我有onResult方法的结果,但我不知道如何得到它。
我试着按照Brian的指示去做,但我只是在浪费时间。也许是因为我不是flex actionscript程序员,但我添加了Brian发布的代码,并:
public function getPerson():void { // this is connect to a button in .mxml
_dm.addEventListener(DATA_RECEIVED, onPersonFound); * compile error 1
_dm.getPerson();
}错误是DATA_RECEIVED未定义
比在DataManager中:
public class DataManager {
public static const DATA_RECEIVED:String = "DATA_RECEIVED";
...
private function onResult(event:ResultEvent,token:Object):void {
per = event.result as People; // is a bean class
dispatchEvent(new DataReceivedEvent(DATA_RECEIVED, per)); * compile error 2
}
}错误2是调用可能未定义的方法dispatchEvent
错误在哪里?请写完整的代码,因为我有两天的flex - actionscript - blazeds,我有几个时间来尝试解决方案。谢谢
好吧,对于所有这些帖子,很抱歉,我只是用同样的问题创建了一个新的(但更详细和清晰)。我正在一步一步地学习这门语言,我设法实现了Brian代码,但是DataManager.as类必须扩展EventDispatcher,如果我不扩展它,我就会出现编译错误。目前,我设法在addEventListener调用(本例中为onPeopleFound)中定义的方法中获取resultEvent数据。非常感谢布赖恩,我想我将来肯定需要你的帮助(至少在项目被接受之前)。再见
发布于 2015-08-06 04:23:58
您可以调整方法getPerson以使两个参数引用回调函数。
public function getPerson(onResultCallback:Function, onFaultCallback:Function):void {
var token:AsyncToken = _service.getPersona();
token.addResponder(new AsyncResponder(onResultCallback,onFaultCallback));
}这样,您就可以在所需类的实例中接收数据。
发布于 2015-08-06 05:54:30
一种选择是在从Java调用中获取数据时调度一个事件:
Home.as
...
public function getPerson():void { // this is connect to a button in .mxml
_dm.addEventListener(DATA_RECEIVED, onPersonFound);
_dm.getPerson();
}
private function onPersonFound(dataEvent:DataReceivedEvent):void {
var person:People = dataEvent.people;
//Do important processing...
}
...在DataManager.as中
public class DataManager {
public static const DATA_RECEIVED:String = "DATA_RECEIVED";
...
private function onResult(event:ResultEvent,token:Object):void {
per = event.result as People; // is a bean class
dispatchEvent(new DataReceivedEvent(DATA_RECEIVED, per));
}
}而DataReceivedEvent.as看起来就像是How to dispatch an event with added data - AS3的答案
public class DataReceivedEvent extends Event
{
public static const DATA_RECEIVED:String = "DATA_RECEIVED";
// this is the object you want to pass through your event.
public var result:Object;
public function DataReceivedEvent(type:String, result:Object, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
this.result = result;
}
// always create a clone() method for events in case you want to redispatch them.
public override function clone():Event
{
return new DataReceivedEvent(type, result, bubbles, cancelable);
}
}https://stackoverflow.com/questions/31836944
复制相似问题