基于flex4技术从零开发flex博客系统 : 4 数据存储
2009-05-05 12:06:22 来源:WEB开发网其中configRemoting将在Application initialize时调用,用于初始化RemoteObject对象。BasicLayout用于声明当前Application使用absolate布局,详见new language tag Private and layout in flex4。
编译,运行,点击greeting,弹出如下提示框:
四,有问题,需要调试了
貌似没有问题,貌似数据已经存进Google了。但是第二次单击提交,就有问题了,Alert了两次。为什么点击一次button,弹出了两个提示框?难道接口被调用了二次?
为了找到原因所在,我必须要采用debug模式了。在本地采用debug模式之前,需修改Flex Project的属性里的output folder url为http://localhost:8080/,并把RemoteObject的endpoint设为http://localhost:8080/weborb.wo。但是在正式布署到Google app engine时,需记得移除这些设置。
通过debug,我发现greet2接口确实仅调用了一次,但是Alert.show却执行了两次。这说明AbstractOperation是一个引用对象,第一次调用_remotingObj.getOperation(”greet2″)返回的对象与第二次调用返回的对象是同一个对象,我们在同一个对象上添加了两次ResultEvent事件监听。handler做为内嵌函数变量,虽然前后名称相同,但因是局部函数变量,所以内部ID并不相同,是两个完全不同的对象。结果便是,每单击一次,Alert便会多一次。
为了验证我的想法,我查看了RemoteObject的sdk源码,在其及其父类AbstractService中,有如下相关代码:
override public function getOperation(name:String):AbstractOperation
{
var op:AbstractOperation = super.getOperation(name);
if (op == null)
{
op = new Operation(this, name);
_operations[name] = op;
op.asyncRequest = asyncRequest;
}
return op;
}
…
public function getOperation(name:String):AbstractOperation
{
var o:Object = _operations[name];
var op:AbstractOperation = (o is AbstractOperation) ? AbstractOperation(o) : null;
return op;
}
更多精彩
赞助商链接