如何在actionscript中跟踪代码执行的顺序?

时间:2012-12-12 17:46:47

标签: actionscript-3 flex flash-builder

我正在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)。

2 个答案:

答案 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事件处理程序。