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;

}

これは 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()
        {
        }
    }
}

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

コードベースのどこかにクラスへの参照が少なくとも 1 つあることを確認してください。

これは、特にリモート呼び出しを最初に開発するとき、およびどこかのコードで実際に型を使用する前によくあるトラップです。

クラスが参照されていない場合、クラスはコンパイルされないため、登録されません。

多くの場合、開発の初期段階で、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 に答える