Отображение класса AMF не работает - PullRequest
1 голос
/ 28 октября 2011

Я создаю приложение, используя Flex 4.5 и Zend_AMF в качестве моей конечной точки 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 а не Request.Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

Убедитесь, что у вас есть хотя бы одна ссылка на класс где-то в вашей кодовой базе.

Это обычная ловушка, особенно при первой разработке удаленного вызова и до того, как вы фактически использовали тип в любом коде где-либо.

Если на класс не ссылаются, он не компилируется и, следовательно, не регистрируется.

Зачастую на ранних этапах разработки я создаю класс StaticLinker:

public class StaticLinks
{
    private var request:Request;
}

Затем укажите это в моей заявке:

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

Кстати, вы правы в своем предыдущем предположении: если вы аннотировали класс как [RemoteObject], вам не нужно звонить registerClass().

1 голос
/ 28 октября 2011

Вы помните, чтобы зарегистрировать класс?

import flash.net.registerClassAlias;

flash.net.registerClassAlias("com.site.remote.Request", Request);
...