2

我在 AIR 中编写一个移动应用程序,我经常遇到同样的问题:执行顺序是什么?我知道可以确定 UI 类的初始化、创建等顺序。我还可以将跟踪语句放入每个类的构造函数中,并这样做。但这很乏味。

是否有一段通用代码可以让每个类在加载时“宣布”自己?有没有人写过这样的东西?

伪代码类似于:

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之后加载了 xml。因此,有一种方法可以获取所有这些信息,而不必在课后的课堂上写下来,这将是有帮助的。请注意,并非所有类都在显示列表中(例如 Model 和 XMLLoader)。

4

2 回答 2

2

AS3Trace在 mm.cfg 文件中指定将提供执行函数的完整流水线。

有关其他隐藏的 mm.cfg 功能,请参阅此博客文章,这里是让 mm.cfg 在您的移动应用程序中运行的一些帮助。

于 2012-12-12T22:20:37.620 回答
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事件处理程序中。

于 2012-12-12T19:25:02.477 回答