2010-06-01 61 views
1

例如,使用我的用户配置模式:如何在Django/PyAMF和Flex之间映射字段名称?

class UserProfile(models.Model): 
    user  = models.ForeignKey(User, unique=True) 
    blurb  = models.CharField(max_length=200, null=True, blank=True) 
    public = models.BooleanField(default=True) 
    ... 

因此,我结束了一个被称为“公”领域。由于它是一个关键字,因此它不会在ActionScript中进行切换。由于它在django-profile包中被分成几层功能,所以很难修改。所以,我不得不将其重命名在Flex端:

[RemoteClass(alias="...")] 
[Bindable] 
public class UserProfile 
{ 
    public function UserProfile() 
    { 
    } 
    public var id:int; 
    public var blurb:String; 
    public var _public:Boolean; 
    ... 

其中,对交易的任何一方,我可以说出“远程现场市民转化为局部场_Public”?我在PyAMF方面用ClassAliases弄混了一下,但它很快就乱了,没有关于如何很好地做到这一点的文档。 Flex侧的文档似乎表明有一个“处理传入请求”处理程序,我可以重写,但我认为它在已经填充com对象中的字段之后发生,因此将它们放在地板上,因为适当的领域是不存在的,并留下我和一帮:

ReferenceError: Error #1056: Cannot create property 
在Flex跟踪

...

回答

1

为了支持这一点,PyAMF的需要提供字段之间的代名词映射。在那之前,你可以使用IExternalizable(虽然笨拙地):

class UserProfile(model.Model): 
    user  = models.ForeignKey(User, unique=True) 
    blurb  = models.CharField(max_length=200, null=True, blank=True) 
    public = models.BooleanField(default=True) 

    class __amf__: 
    external = True 

    def __writeamf__(self, output): 
    output.writeObject(self.id) 
    output.writeObject(self.blurb) 
    output.writeObject(self.public) 

    def __readamf__(self, input): 
    self.id = input.readObject() 
    self.blurb = input.readObject() 
    self.public = input.readObject() 

有了相应的Flex代码:

[RemoteClass(alias="...")] 
[Bindable] 
public class UserProfile implements IExternalizable 
{ 
    public function UserProfile() 
    { 
    } 
    public var id:int; 
    public var blurb:String; 
    public var _public:Boolean; 

    public function writeExternal(output:IDataOutput) 
    { 
    output.writeObject(id); 
    output.writeObject(blurb); 
    output.writeObject(_public); 
    } 

    public function readExternal(input:IDataInput) 
    { 
    id = input.readObject(); 
    blurb = input.readObject(); 
    _public = input.readObject(); 
    } 
} 

注意我没有测试上面的代码,但原则上应工作。

顺便说一下,你可以详细了解什么是关于documentation混淆?我很乐意为新用户做到这一点。

+0

太棒了,非常感谢,我确定这应该工作,我会尽快尝试。为了公平起见,我确实在某些地方看到了这样的效果,我只是希望能有更明确的东西来为我写这篇文章,这样我就不用再继续这样做了。然而,我想我可以写这个包装并发布给其他人使用。 :-) 回答你的要求,我想说的是,在你指出的文档链接中给出你在上面作为例子写的内容会有所帮助 - 我不得不在其他地方找到类似于上面的内容。 – eruciform 2010-06-03 15:32:59

+0

也是,上面有一点点的黑客,或者在引擎盖下,对我来说是一种风味。它不会让我相信它不会破坏其他地方。而将一个字段映射到另一个字段的特定API将会。然而,这只是我从输入如此多__双下划线__的东西中得到的感觉,这些东西包括硬编码的有序信息。 (感觉像手工包装tcp或其他东西:-) 如果有更多关于classalias接口的解释,它也会很好。在阅读文档或如何使用它之后,我不太确定它的功能。 – eruciform 2010-06-03 15:36:11

+0

ClassAlias是用来处理[class] .__ amf__提供的元数据的PyAMF的内部类。上面的答案确实是一种破解,我创建了一张提供所描述同义词工具的票据。看到http://dev.pyamf.org/ticket/779 – njoyce 2010-06-07 07:04:50

相关问题