10

Actionscript 支持在 BlazeDS 中使用的 [RemoteClass] 元数据标记,为将 AMF 二进制对象从 Java 编组到 BlazeDS 提供数据绑定提示。

例如:

Java: 包示例;

public class UserInfo
{
    private String userName;

    public String getUserName()
    {
        return userName;
    }

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

动作脚本:

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

[RemoteClass] 在 BlazeDS 框架中究竟是如何实现的,您能否覆盖该行为并提供一个自定义数据绑定远程框架(例如 JSON 消息传递系统),您可以将其绑定到 Actionscript [Bindable]、[RemoteClass] 类?

4

3 回答 3

19

[RemoteClass(alias="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 对象的类上使用“反射”来查询对象的属性、属性和方法。

For example the following code snippet for ObjectCodec.as seems to retrieve the alias attribute by using "@":

override protected function encodeComplex(o:Object, b:IBinary, context:IContext=null):void
{
        var desc:XML = describeType(o);
        var classAlias:String = desc.@alias;
        //...
}
于 2009-11-04T17:28:16.907 回答
2

[RemoteClass] 仅用于 Flex 端。它真正做的只是调用flash.net.registerClassAlias()函数来设置本地对象和远程类名之间的映射。

于 2009-11-04T11:40:51.067 回答
2

You could use the -keep-generated-actionscript compiler argument to see what code is generated and how it works exactly.

于 2009-11-04T21:56:28.110 回答