我正在构建一个应用程序,使用Flex 4.5和Zend_AMF作为我的AMF端点。
我想映射一个类在PHP中称为请求到一个类在Flex中称为请求。
这是我的php类:
<?php
namespace appweb;
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
。我做错了什么?
确保在代码库中至少有一个对该类的引用。
这是一个常见的陷阱,特别是在第一次开发远程调用时,以及在任何地方的任何代码中实际使用该类型之前。
如果类没有被引用,它就不会被编译,因此也不会被注册。
通常,在早期开发期间,我将最终创建一个StaticLinker
类:
public class StaticLinks
{
private var request:Request;
}
然后在我的应用程序中引用:
<s:Script>
var linker:StaticLinks;
</s:Script>
BTW -您之前的假设是正确的:如果您将类注释为[RemoteObject]
,则不需要调用registerClass()
。
你记得注册课程了吗?
import flash.net.registerClassAlias;
flash.net.registerClassAlias("com.site.remote.Request", Request);