我正在使用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
的形式返回。我做错了什么?
答案 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);