AMF类映射不起作用

时间:2011-10-28 01:02:41

标签: flex object types amfphp zend-amf

我正在使用Flex 4.5和Zend_AMF构建一个应用程序作为我的AMF端点。

我想将PHP中的一个名为CRequest的类映射到一个名为Request in Flex的类。

这是我的php课程:

<?php
namespace app\web;

class CRequest{
   public $_explicitType = 'com.site.remote.Request';

   public $stuff1;

   public $stuff2;

}

这是actionscript类:com.site.remote.Request

package com.dreamatique.remoting
{
    [Bindable]
    [RemoteClass(alias="com.site.remote.Request")]
    public class Request
    {

        public var stuff1:String;

        public var stuff2:String;

        public function Request()
        {
        }
    }
}

作为测试,无论请求是什么,我都让端点从PHP端返回CRequest的实例。

然后我正在进行这样的远程对象调用:

var remoteObject:RemoteObject = new RemoteObject();
remoteObject.endpoint = "http://localhost/to/my/amf/endpoint";
remoteObject.showBusyCursor = true;
remoteObject.source = 'testing';
var op:AbstractOperation = remoteObject.getOperation(null);
op.addEventListener(ResultEvent.RESULT, result);
op.send();

public static function result(event:ResultEvent):void{

    trace(event.result);
    trace(Class(getDefinitionByName(getQualifiedClassName(event.result))));
    Alert.show(event.result.toString());

}

问题是结果会以ObjectProxy而不是Request的形式返回。我做错了什么?

2 个答案:

答案 0 :(得分:2)

确保您的代码库中某处至少有一个类的引用。

这是一个常见的陷阱,特别是在第一次开发远程调用时,以及在任何地方实际使用任何代码的类型之前。

如果未引用该类,则不会编译该类,因此不会注册。

通常,在早期开发过程中,我最终会创建一个StaticLinker类:

public class StaticLinks
{
    private var request:Request;
}

然后在我的申请中引用它:

<s:Script>
   var linker:StaticLinks;
</s:Script>

BTW - 您之前的假设是正确的:如果您已将该课程注释为[RemoteObject],则无需致电registerClass()

答案 1 :(得分:1)

你还记得注册课程吗?

import flash.net.registerClassAlias;

flash.net.registerClassAlias("com.site.remote.Request", Request);