Apache flex Flex:AMF和Enum singleton–;他们一起玩得好吗?
我使用Python+PyAMF与Flex客户机来回对话,但我使用的psudo枚举单例遇到了一个问题:Apache flex Flex:AMF和Enum singleton–;他们一起玩得好吗?,apache-flex,actionscript,amf,pyamf,Apache Flex,Actionscript,Amf,Pyamf,我使用Python+PyAMF与Flex客户机来回对话,但我使用的psudo枚举单例遇到了一个问题: class Type { public static const EMPTY:Type = new Type("empty"); public static const FULL:Type = new Type("full"); ... } 当我使用本地创建的实例时,一切都很完美: if (someInstance.type == Type.EMPTY) { /* d
class Type {
public static const EMPTY:Type = new Type("empty");
public static const FULL:Type = new Type("full");
...
}
当我使用本地创建的实例时,一切都很完美:
if (someInstance.type == Type.EMPTY) { /* do things */ }
但是,如果'someInstance'来自Python代码,那么它的'type'实例显然不是type.EMPTY
或type.FULL
那么,让我的代码工作的最佳方式是什么
是否有某种方法可以控制AMF的反序列化,以便在加载远程类型时调用正确的转换?还是我应该咬紧牙关,用=
以外的东西比较类型
?或者我可以用某种方式欺骗=
类型的内聚来做我想做的事情吗
编辑:或者,Flex的远程处理套件是否提供了任何在实例反序列化后运行的挂钩,以便我可以执行转换?随机思考:也许您可以在类型上创建一个成员函数,返回与之匹配的规范版本
比如:
class Type {
public static const EMPTY:Type = new Type("empty");
public static const FULL:Type = new Type("full");
...
// I'm assuming this is where that string passed
// in to the constructor goes, and that it's unique.
private var _typeName:String;
public function get canonical():Type {
switch(this._typeName) {
case "empty": return EMPTY;
case "full": return FULL;
/*...*/
}
}
}
只要您知道哪些值来自python,您就可以首先转换它们:
var fromPython:Type = /*...*/
var t:Type = fromPython.canonical;
然后再使用t
如果你不能分辨什么时候东西来自python,什么时候它们来自AS3,那么它会变得非常混乱,但是如果你在AS和python代码之间有一个隔离层,你可以确保你在那里进行转换
它不像你可以控制反序列化那样干净,但只要你有一个好的隔离层,它就应该工作。随机思考:也许你可以在类型上创建一个成员函数,返回与之匹配的规范版本
比如:
class Type {
public static const EMPTY:Type = new Type("empty");
public static const FULL:Type = new Type("full");
...
// I'm assuming this is where that string passed
// in to the constructor goes, and that it's unique.
private var _typeName:String;
public function get canonical():Type {
switch(this._typeName) {
case "empty": return EMPTY;
case "full": return FULL;
/*...*/
}
}
}
只要您知道哪些值来自python,您就可以首先转换它们:
var fromPython:Type = /*...*/
var t:Type = fromPython.canonical;
然后再使用t
如果你不能分辨什么时候东西来自python,什么时候它们来自AS3,那么它会变得非常混乱,但是如果你在AS和python代码之间有一个隔离层,你可以确保你在那里进行转换
它不像你能控制反序列化那样干净,但只要你有一个好的隔离层,它就会工作。hhmm…这不是个坏主意。我甚至可以在类型的客户机中有一个getter,类似于函数get Type():Type{return\u Type.canonical;}
。谢谢现在,你提到我可以在内部转换它们…有什么方法可以自动触发转换吗?Remoting
工具是否提供了“在这个实例被反序列化之后”类型的钩子?我说的是隔离层。如果您与python的通信层是隔离的(只有一个类处理来自它的消息),那么您可以在将数据传递给处理它的任何对象之前在那里进行转换。如果不知道代码的更多细节,就很难说你会把它放在哪里。嗯……这不是个坏主意。我甚至可以在类型的客户机中有一个getter,类似于函数get Type():Type{return\u Type.canonical;}
。谢谢现在,你提到我可以在内部转换它们…有什么方法可以自动触发转换吗?Remoting
工具是否提供了“在这个实例被反序列化之后”类型的钩子?我说的是隔离层。如果您与python的通信层是隔离的(只有一个类处理来自它的消息),那么您可以在将数据传递给处理它的任何对象之前在那里进行转换。如果不知道更多关于代码的细节,就很难说你会把它放在哪里。