我正在使用Pyamf作为我的Flex应用程序的后端,我发现在强类型类的映射方面有一些奇怪的问题。
这是我要返回的模型
class MilestonActBase(RewardActBase):
def __unicode__(self):
return self.milestone.title
class Meta:
abstract = True
class SouvenirAct(MilestonActBase):
souvenir = models.ForeignKey(Souvenir)
group = models.ForeignKey(Group, blank=True, null=True)
def __unicode__(self):
return self.souvenir.title下面是我的方法,它返回views.py中的对象:
try:
pyamf.register_class(Souvenir, 'com.rain.dennys.services.vo.Souvenir')
pyamf.register_class(SouvenirAct, 'com.rain.dennys.services.vo.SouvenirAct')
except ValueError:
print "Classes already registered"
@login_required
def get_souvenir_acts(http_request):
user = http_request.user
souvenirActs = SouvenirAct.objects.filter(user=user)
return souvenirActs下面是我的AS3类:
package com.rain.dennys.model
{
[RemoteClass (alias="com.rain.dennys.services.vo.SouvenirAct")]
[Bindable]
public class SouvenirAct extends RewardActBase
{
public var souvenir:Souvenir;
public function SouvenirAct()
{
}
}
}当我调用这个服务时,我会返回一个匿名对象数组,尽管我已经用Python语言编写了register_class,用Flex语言编写了RemoteClass。所以这对我来说没什么意义。我一定是做错了什么?
在尝试它的过程中,我尝试了一些不同的方法。其中一件工作是在Flex中迭代数组,并将项转换为SouvenirAct对象,如下所示:
private function onResult(r:Array):void
{
for each(var o:Object in r)
{
var c:SouvenirAct = o as SouvenirAct;
}
}当我在Flex中这样做的时候,我得到了我的SouvenirAct对象的类型,但是子纪念品对象都是空的。因此,当我在返回结果中强制转换SouvenirAct对象时,强类型的子属性会得到null。
以前有没有人见过这个?有没有一种不同的方式来映射类?
发布于 2011-11-16 00:21:13
所以我现在非常确定问题出在netConnection类上。我把它换掉了,这样我就可以使用RemoteObject了,现在一切都像预期的那样工作了。
这就是我是如何连接的:
netConnection.connect("http://127.0.0.1:8000/gateway/");
netConnection.addEventListener(NetStatusEvent.NET_STATUS, onError);
var responder:Responder = new Responder(onResult, handleFault);然后我切换到这里所描述的东西:http://www.adobe.com/devnet/flex/articles/flex_django.html如果其他人遇到这个问题,而您正在使用netConnection,我的建议是使用RemoteObject
发布于 2011-11-15 23:48:58
好吧,这只是一种猜测,但这已经刺痛了我几次。您是否曾经在flex应用程序中实例化过Souvenir anywhere实例?如果不是..。AS没有费心去编译它,你会得到匿名对象。
当您执行onResult循环代码块时,它之所以有效,是因为您正在实例化SouvenirAct的对象,但从未实例化Souvenir (子级),因此它仍然为null,因为ActionScript从未在您的服务调用之前编译it...Try
//TODO: remove me later
var imjustheretocompile:Souvenir = new Souvenir();
var alsoCompileMetoo:SouvenirAct = new SouvenirAct();现在,既然你已经创建了一个SouvenirAct的实例,它实际上应该被编译到你的应用程序中。这通常不是问题,因为我们假设您将在某个时候使用该类,然后您可以返回并删除imjustheretocompile和alsoCompileMetoo变量。
https://stackoverflow.com/questions/8138756
复制相似问题