2009-11-04 138 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编译器参数,看看会产生什么样的代码,它是怎么工作的。

相关问题