1

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

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

这是我的 php 类:

<?php
namespace app\web;

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

   public $stuff1;

   public $stuff2;

}

这是动作脚本类: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()
        {
        }
    }
}

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

然后我像这样进行远程对象调用:

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());

}

问题是结果返回键入 asObjectProxy和 not Request。我究竟做错了什么?

4

2 回答 2

2

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

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

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

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

public class StaticLinks
{
    private var request:Request;
}

然后在我的应用程序中引用它:

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

顺便说一句-您之前的假设是正确的:如果您已将该类注释为[RemoteObject],则不需要调用registerClass().

于 2011-10-28T02:34:43.510 回答
1

你记得注册课程吗?

import flash.net.registerClassAlias;

flash.net.registerClassAlias("com.site.remote.Request", Request);
于 2011-10-28T01:44:19.903 回答