我正在AIR中编写移动应用程序,我经常遇到同样的问题:执行的顺序是什么?我知道可以确定UI类的初始化,创建等的顺序。我也可以将trace语句放入每个类的构造函数中,并以这种方式执行。但这很乏味。
是否有一个通用的代码片段,每个类在加载时都会'宣布'?有没有人写过这样的东西?
伪代码类似于:
for each var class:Class in application
{
trace(class.getQualifiedClassName.toString();
}
感谢。
编辑:
这是一个例子。我运行MyApp.mxml并在其上放置跟踪语句。第一个视图是一个由数组填充的列表,该数组来自服务器,通过xml。但是当应用程序加载时,列表为空。为什么?由于以下事件顺序,基于我手动插入的跟踪语句:
MyApp::viewnavigatorapplication1_intitializeHandler firing
Model::initialize function firing
XMLLoader::going to http://mysite.com/myxml.xml
MyApp::addedToStageHandler running
HomeListView::viewActivateHandler firing
XMLLoader::xmlLoaded
列表为空的原因是在 HomeListView被激活后加载了。因此,有一种方法可以获得所有这些信息而不必在课后写课。请注意,并非所有类都在displaylist上(例如Model和XMLLoader)。
答案 0 :(得分:2)
在mm.cfg文件中指定AS3Trace
将提供执行函数的完整功能。
请参阅this blog post了解其他隐藏的mm.cfg功能,并here is some help让mm.cfg在您的移动应用中运行。
答案 1 :(得分:0)
这是你想要的东西:
var numChildren:Number = this.numChildren;
for (var i:int = 0; i < numChildren; i++) {
var displayObject:DisplayObject = this.getChildAt(i);
displayObject.addEventListener(FlexEvent.INITIALIZE, function (e:FlexEvent):void {
trace("child " + displayObject.name +" is initializing" );
});
displayObject.addEventListener(FlexEvent.CREATION_COMPLETE, function (e:FlexEvent):void {
trace("child " + displayObject.name +"'s creation is completed" );
});
}
您需要将其添加到主应用程序的initialize
事件处理程序。