2009-11-04 27 views
10

Actionscript支持一個[RemoteClass]元數據標籤,該標籤在BlazeDS中用於提供數據綁定提示,用於將AMF二進制對象從Java編組爲Java到BlazeDS。如何在Flex ActionScript中使用[RemoteClass]來進行自定義數據綁定?

例如:

爪哇: 包樣品;

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]類?

回答

19

[RemoteClass(別名= 「com.example.MyClass」)]是用於調用flash.net.registerClassAlias()一個Flex簡寫:

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

要在運行時訪問這些登記別名類(編寫自定義JSON數據序列化框架)可以調用:

getClassByAlias(aliasName:String):Class 查找以前通過調用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]; 
     //... 
} 
+0

Adob​​e的網站不再有'registerClassAlias'方法的信息;有[在Adobe論壇上發佈的帖子](http://forums.adobe.com/thread/1012207?start=0&tstart=0)查找丟失的文檔。 – supervacuo 2012-06-06 14:30:31

+0

@supervacuo:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/package.html#registerClassAlias%28%29 – 2013-05-24 21:17:09

2

[RemoteClass]僅用於Flex側。它的真正用處是調用flash.net.registerClassAlias()函數來設置本地對象和遠程類名之間的映射。

+0

那麼有沒有辦法訪問flash.net.registerClassAlias()列表。我正在嘗試使用JSON消息編寫自己的自定義遠程處理,因此我沒有使用Flex的生產者/使用者或IDataInput和IDataOutput接口。 我需要能夠從遠程Java類名稱中查找Flex類並構造它。 – Dougnukem 2009-11-04 17:22:11

2

您可以使用-keep-generated-actionscript編譯器參數,看看會產生什麼樣的代碼,它是怎麼工作的。

相關問題