Как [RemoteClass] работает в Flex ActionScript, я могу использовать его для пользовательской привязки данных?

ActionScript поддерживает тег метаданных [RemoteClass], который используется в BlazeDS для предоставления привязок к привязке данных для сортировки двоичных объектов AMF от Java до BlazeDS.

Например:

Java:  образец пакета;

public class UserInfo
{
    private String userName;

    public String getUserName()
    {
        return userName;
    }

    public void setUserName(String value)
    {
        userName = value;
    }
}

Actionscript:

[Bindable]
[RemoteClass(alias="sample.UserInfo")]
public class UserInfo
{
    public var userName:String="";
}

Как точно реализован [RemoteClass] в структуре BlazeDS, и вы можете переопределить это поведение и предоставить настраиваемую инфраструктуру удаленного связывания данных (например, систему передачи сообщений JSON), которую вы могли бы привязать к ActionScript [Bindable], [ RemoteClass]?

Ответ 1

[RemoteClass (alias = "com.example.MyClass" )] является сокращением Flex для вызова flash.net.registerClassAlias ​​():

public function registerClassAlias(aliasName:String, classObject:Class):void

Чтобы получить доступ к этим зарегистрированным классам псевдонимов во время выполнения (для создания пользовательской структуры сериализации данных JSON), вы можете позвонить:

getClassByAlias (aliasName: String): Класс Выбирает класс, который ранее имел псевдоним, зарегистрированный посредством вызова метода registerClassAlias ​​().

Для исходящей кодировки от AS к Java вам нужно получить имя класса с псевдонимом, вы можете сделать это, вызвав flash.utils.describeType() и используйте "отражение" в классе объектов ActionScript для запроса атрибутов, свойств, методов объекта.

Например, следующий фрагмент кода для ObjectCodec.as, похоже, извлекает атрибут псевдонима с помощью "@":

override protected function encodeComplex(o:Object, b:IBinary, context:IContext=null):void
{
        var desc:XML = describeType(o);
        var classAlias:String = [email protected];
        //...
}

Ответ 2

[RemoteClass] используется только на стороне Flex. Все, что он действительно делает, это вызвать функцию flash.net.registerClassAlias ​​() для настройки сопоставления локального объекта с удаленным именем класса.

Ответ 3

Вы можете использовать аргумент компилятора -keep-generated-actionscript, чтобы узнать, какой код создан и как он работает.