2009-11-04 27 views
10

Actionscript obsługuje znacznik metadanych [RemoteClass], który jest używany w BlazeDS w celu dostarczania wskazówek wiążących dane dla zestawiania binarnych obiektów AMF z Java do BlazeDS.Jak działa [RemoteClass] w Flex Actionscript, czy mogę go używać do niestandardowego wiązania danych?

Na przykład:

Java: opakowanie próbki;

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

Jak dokładnie jest [RemoteClass] realizowany w ramach BlazeDS i można przesłonić to zachowanie i zapewnienie niestandardowych danych wiążące ramy usług zdalnych (np komunikat JSON przekazywanie systemu), które można powiązać z klasą Actionscript [Bindable], [RemoteClass]?

Odpowiedz

19

[RemoteClass (alias = "com.example.MyClass")] jest skrótem Flex za nazwanie flash.net.registerClassAlias():

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

Aby uzyskać dostęp do tych zarejestrowanych klas alias przy starcie (napisać niestandardowy serializacji danych JSON ram) możesz zadzwonić:

getClassByAlias (aliasName: String): Class Wyszukuje klasę, która poprzednio miała alias zarejestrowany przez wywołanie metody registerClassAlias ​​().

W przypadku wychodzącego kodowania z AS do Javy należy pobrać nazwę klasy aliasowej, można to zrobić, wywołując flash.utils.describeType() i użyć "odbicia" w klasie obiektu Actionscript, aby zapytać o atrybuty, właściwości, metody obiektu.

Na przykład następujący fragment kodu dla ObjectCodec.as wydaje się odzyskać atrybutu alias za pomocą „@”:

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

Strona Adobe nie zawiera już informacji na temat metody 'registerClassAlias'; jest [post na forach Adobe] (http://forums.adobe.com/thread/1012207?start=0&tstart=0) disuccsing brakującej dokumentacji. – supervacuo

+0

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

2

[RemoteClass] jest używany tylko po stronie Flex. Tak naprawdę to wywołanie funkcji flash.net.registerClassAlias() w celu skonfigurowania mapowania między lokalnym obiektem a zdalną nazwą klasy.

+0

Czy istnieje sposób uzyskania dostępu do listy flash.net.registerClassAlias ​​(). Próbuję napisać własne niestandardowe zdalne używanie wiadomości JSON, więc nie używam interfejsów Flex Producer/Consumer lub IDataInput, IDataOutput. Potrzebuję być w stanie wyszukać klasę Flex ze zdalnej nazwy klasy java i skonstruować ją. – Dougnukem

2

Można użyć argumentu -keep-generated-actionscript kompilatora, aby zobaczyć, co kod generowany jest i jak to działa dokładnie.