2009-11-04 11 views
10

Actionscript admite una etiqueta de metadatos [RemoteClass] que se utiliza en BlazeDS para proporcionar sugerencias de enlace de datos para ordenar objetos binarios AMF de Java a BlazeDS.¿Cómo funciona [RemoteClass] en Flex Actionscript ¿puedo usarlo para el enlace de datos personalizado?

Por ejemplo:

Java: muestra paquete;

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=”"; 
} 

¿Cómo es exactamente el [RemoteClass] aplicado en el marco BlazeDS y podría anular ese comportamiento y proporcionar un marco de interacción remota vinculante datos personalizados (por ejemplo, un mensaje JSON pasar el sistema) que podría vincular a la clase Actionscript [Bindable], [RemoteClass]?

Respuesta

19

[RemoteClass (alias = "com.example.MyClass")] es un atajo Flex para llamar flash.net.registerClassAlias():

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

Para acceder a esas clases de alias registrados en tiempo de ejecución (para escribir un JSON marco de serialización de datos personalizados) puede llamar a:

getClassByAlias (aliasName: String): Clase Busca una clase que anteriormente tenía un alias registrado mediante una llamada al método registerClassAlias ​​().

Para la codificación saliente de AS a Java necesita recuperar el nombre de clase con alias, puede hacerlo llamando al flash.utils.describeType() y usar "reflection" en la clase del objeto Actionscript para consultar atributos, propiedades y métodos del objeto.

Por ejemplo, el siguiente fragmento de código para ObjectCodec.as parece recuperar el atributo de alias mediante el uso de "@":

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

El sitio de Adobe ya no tiene información sobre el método 'registerClassAlias'; hay [una publicación en los foros de Adobe] (http://forums.adobe.com/thread/1012207?start=0&tstart=0) descifrando la documentación faltante. – supervacuo

+0

@supervacuo: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/package.html#registerClassAlias%28%29 –

2

[RemoteClass] solo se usa en el lado Flex. Todo lo que realmente hace es llamar a la función flash.net.registerClassAlias() para configurar una asignación entre un objeto local y un nombre de clase remota.

+0

Entonces, ¿hay alguna manera de acceder a la lista flash.net.registerClassAlias ​​()? Intento escribir mi propia comunicación remota personalizada utilizando mensajes JSON, por lo que no utilizo las interfaces Proacer/Consumidor/IDataInput, IDataOutput de Flex. Necesito poder buscar una clase Flex desde un nombre de clase de Java remoto y construirlo. – Dougnukem

2

Se podría utilizar el argumento -keep-generated-actionscript compilador para ver qué código se genera y cómo funciona exactamente.

Cuestiones relacionadas