2009-11-04 13 views
10

Actionscript unterstützt ein [RemoteClass] -Metadaten-Tag, das in BlazeDS verwendet wird, um Datenbindungshinweise zum Marshalling von AMF-Binärobjekten von Java nach BlazeDS bereitzustellen.Wie funktioniert [RemoteClass] in Flex Actionscript, kann ich es für die benutzerdefinierte Datenbindung verwenden?

Zum Beispiel:

Java: Paket Probe;

public class UserInfo 
{ 
    private String userName; 

    public String getUserName() 
    { 
     return userName; 
    } 

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

Action:

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

Wie genau wird das [Remote] im BlazeDS Framework implementiert und können Sie dieses Verhalten außer Kraft setzen und bieten eine benutzerdefinierte Datenbindungsremote Rahmen (zB eine JSON-Nachricht System übergeben), das Sie an die Klasse Actionscript [Bindable], [RemoteClass] binden könnten?

Antwort

19

[Remote (alias = "com.example.MyClass")] ist eine Flex Stenografie flash.net.registerClassAlias() für den Aufruf:

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

Um diese registrierten Alias ​​Klassen zur Laufzeit zugreifen (einen benutzerdefinierten JSON Datenserialisierung Rahmen schreiben) Sie können anrufen:

getClassByAlias (aliasName: String): Klasse Sucht eine Klasse, die zuvor einen Alias ​​durch einen Aufruf der Methode registerClassAlias ​​() registriert hatte.

Für die ausgehende Codierung von AS nach Java müssen Sie den Namen der Alias-Klasse abrufen. Rufen Sie dazu flash.utils.describeType() auf und verwenden Sie "reflection" für die Klasse Ihres Actionscript-Objekts, um Attribute, Eigenschaften und Methoden des Objekts abzufragen.

Zum Beispiel der folgende Code-Schnipsel für ObjectCodec.as scheint unter Verwendung des Alias-Attribut abzurufen „@“:

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

Die Website von Adobe verfügt nicht mehr über Informationen zur Methode 'registerClassAlias'. Es gibt [einen Beitrag in den Adobe-Foren] (http://forums.adobe.com/thread/1012207?start=0&tstart=0), der die fehlende Dokumentation auflistet. – supervacuo

+0

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

2

[RemoteClass] wird nur auf der Flex-Seite verwendet. Alles, was es wirklich tut, ist die flash.net.registerClassAlias() Funktion aufrufen, um eine Zuordnung zwischen einem lokalen Objekt und einem Remote-Klassennamen einzurichten.

+0

So gibt es eine Möglichkeit, auf die Liste flash.net.registerClassAlias ​​() zuzugreifen. Ich versuche, meine eigenen benutzerdefinierten Remoting mit JSON-Nachrichten zu schreiben, so dass ich nicht die Producer/Consumer- oder IDataInput-, IDataOutput-Interfaces von Flex verwende. Ich muss in der Lage sein, eine Flex-Klasse von einem Remote-Java-Klassennamen zu suchen und es zu konstruieren. – Dougnukem

2

Sie den -keep-generated-actionscript Compiler-Argument verwenden könnte, um zu sehen, welcher Code generiert wird und wie es funktioniert genau.