Как я могу отобразить имена поля между Django/Pyamf и Flex?
-
22-10-2019 - |
Вопрос
Например, используя мою модель пользователя:
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 )
...
Таким образом, у меня в конечном итоге поле под названием «публика». Это не Jive в ActionScript, потому что это ключевое слово. Это раздражает меняться, потому что он выпекается в несколько слоев функциональности в пакете Django-Profile. Итак, я вынужден переименовать его на гибкой стороне:
[RemoteClass(alias="...")]
[Bindable]
public class UserProfile
{
public function UserProfile()
{
}
public var id:int;
public var blurb:String;
public var _public:Boolean;
...
Где, по обе стороны от транзакции, могу ли я заявить: «Публичное общество переводится на локальное поле _public»? Я немного испортился с классами на стороне PYAMF, но это быстро стало грязным, и нет никакой документации о том, как это сделать хорошо. И документация на гибкой стороне, похоже, указывает на то, что есть обработчик «процесс входящего запроса», который я могу переопределить, но я думаю, что это происходит после того, как уже заполняет поля в объекте COM, что бросает их на пол, поскольку соответствует соответствующему Поля нет, и оставляет меня с кучей:
ReferenceError: Error #1056: Cannot create property
В гибкой следу ...
Решение
Чтобы поддержать это, 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()
С соответствующим гибким кодом:
[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();
}
}
Обратите внимание, что я не проверил приведенный выше код, но должен работать в принципе.
Кстати, вы можете подробнее подробно о том, что сбивает с толку документация? Я хотел бы сделать это как можно более четким для новых пользователей.