Frage

Zum Beispiel unter Verwendung meines UserProfile -Modells:

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 )
  ...

So habe ich ein Feld namens "öffentlich". Dies ist nicht in ActionScript, da es sich um ein Schlüsselwort handelt. Es ist ärgerlich zu ändern, weil es im Django-Profile-Paket in mehrere Funktionen der Funktionalität gebacken wird. Also bin ich gezwungen, es auf der Flexseite umzubenennen:

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

Wo kann ich auf beiden Seiten der Transaktion "Remote Field Public" in lokalem Feld _public übersetzt? Ich habe mich ein bisschen mit Klasser auf der Pyamf -Seite herumgespielt, aber es wurde schnell chaotisch und es gibt keine Dokumentation darüber, wie es gut geht. Und die Dokumentation auf der Flexseite scheint anzuzeigen, dass es einen Handler von "Prozess der eingehende Anfrage" gibt, den ich überschreiben kann, aber ich denke, er tritt auf Feld ist nicht da und hinterlässt mich mit einem Haufen:

ReferenceError: Error #1056: Cannot create property

In der Flexspur ...

War es hilfreich?

Lösung

Um dies zu unterstützen, muss PYAMF eine Synonym -Zuordnung zwischen Feldern bereitstellen. Bis dahin konnten Sie benutzen Iexternalizable (obwohl ungeschickt):

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

Mit dem entsprechenden Flex -Code:

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

Beachten Sie, dass ich den obigen Code nicht getestet habe, sollte aber grundsätzlich funktionieren.

Übrigens, können Sie sich genauer darüber aussprechen, was an der verwirrend war? Dokumentation? Ich würde das gerne für neue Benutzer so klar machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top