адлюстраванне АІФ клас не працуе

Я ў будынку прыкладання з дапамогай Flex 4.5 і Zend_AMF як мой АІФ канчатковай кропкі.

Я хацеў бы, каб супаставіць клас з імем CRequest ў PHP для класа пад назвай Request ў 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()
        {
        }
    }
}

У якасці тэсту я зрабіў канчатковая кропка вяртае асобнік 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());

}

Праблема заключаецца ў тым, што вынік прыходзіць назад надрукаваў як ObjectProxy , а не Запыт . Што я не так раблю?

1

2 адказы

Пераканайцеся, што ў вас ёсць па меншай меры адну спасылку на клас дзе-то ў вашым кодзе.

Гэта звычайная пастка, асабліва пры першай распрацоўцы аддаленага выкліку, і, перш чым вы фактычна спажытую тыпу ў любым кодзе, у любым месцы.

Калі клас не спасылаюцца, гэта не вкомпілірованы, і, такім чынам, не рэгістравацца.

Часта на ранніх стадыях развіцця, я ў канчатковым выніку стварыць StaticLinker Клас:

public class StaticLinks
{
    private var request:Request;
}

Тады спасылка гэта ў маім дадатку:


   var linker:StaticLinks;

BTW - вы маеце рацыю ў сваім здагадцы раней: Калі вы анатаваны клас як [RemoteObject] , вы не абавязаны называць RegisterClass() .

2
дададзена
Гэта было яго! Пасля гульні вакол, я выявіў, што клас будзе атрымаць набраны, калі я стварыў асобнік гэтага вар тэставання: запыт; !
дададзена аўтар F21, крыніца

Вы памятаеце, каб зарэгістраваць клас?

import flash.net.registerClassAlias;

flash.net.registerClassAlias("com.site.remote.Request", Request);
1
дададзена
З таго, што я прачытаў ( roboncode.com/articles/144 ) і іншыя запісы ў блогу, < код> registerClassAlias ​​ не патрэбны, калі я выкарыстоўваю гнуткую структуру, але я магу памыляцца. У той час як аб'екты вяртаюцца з класіфікавана як Запыт калі я выкарыстоўваю registerClassAlias ​​, дзіўная справа ў тым, што, калі я выкажу flash.net.registerClassAlias ​​( «asdfsomegibberish», запыт) аб'ект усё яшчэ прыходзіць назад надрукаваў як запыт.
дададзена аўтар F21, крыніца