Как [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
, чтобы узнать, какой код создан и как он работает.