1

たとえば、私のUserProfileモデルを使用します。

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

フレックストレースで..

4

1 に答える 1

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();
  }
}

上記のコードはテストしていませんが、原則として動作するはずです。

ところで、ドキュメンテーションについて何が混乱していたのか、さらに詳しく説明していただけますか? 新しいユーザーのために、それを可能な限り明確にしたいと思います。

于 2010-06-01T20:33:12.750 に答える