首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flex actionscript,从AsyncToken调用中获取数据

Flex actionscript,从AsyncToken调用中获取数据
EN

Stack Overflow用户
提问于 2015-08-05 23:39:04
回答 2查看 224关注 0票数 1

我有一个使用blazeDS的Flex/Java项目。现在我有了一个actionscript文件,它调用了另一个actionscript的方法,这个actionscript文件调用了remoteObject (对db进行简单选择的java类)。

代码如下:

Home.as

代码语言:javascript
复制
..
private var _dm:DataManager = new DataManager;
public function getPerson():void { // this is connect to a button in .mxml
    _dm.getPerson();
}
..

DataManager.as

代码语言:javascript
复制
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发布的代码,并:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
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数据。非常感谢布赖恩,我想我将来肯定需要你的帮助(至少在项目被接受之前)。再见

EN

回答 2

Stack Overflow用户

发布于 2015-08-06 04:23:58

您可以调整方法getPerson以使两个参数引用回调函数。

代码语言:javascript
复制
public function getPerson(onResultCallback:Function, onFaultCallback:Function):void {
   var token:AsyncToken = _service.getPersona();
   token.addResponder(new AsyncResponder(onResultCallback,onFaultCallback));
}

这样,您就可以在所需类的实例中接收数据。

票数 0
EN

Stack Overflow用户

发布于 2015-08-06 05:54:30

一种选择是在从Java调用中获取数据时调度一个事件:

Home.as

代码语言:javascript
复制
...
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中

代码语言:javascript
复制
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的答案

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31836944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档