2012-12-12 56 views
2

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

是否有一个通用的代码段,每个类都会在加载时“宣告”自己?有没有人写过类似的东西?

伪代码会是这样的:

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)。

+0

什么的执行顺序?你使用Flex吗?如果是这样,Flex组件LifeCycle将控制生命周期方法的执行顺序,您可能需要花一些时间阅读相关内容。我认为大多数课程 - 无论是否为Flex - 都将派发“addedToStage”事件。但是,我不清楚这种情况是否满足您对“负载”的定义。 – JeffryHouser

+0

是的,使用Flex,是的,我了解LifeCycle - 这就是我的意思是'确定初始化的顺序'等。假设我有100个类。我问的是,如果有一种方法可以编写一行或几行代码,并让每个类都跟踪“我的构造函数正在运行!”而不是必须经过100次创建跟踪语句。这对于那些不在显示器上的类以及对那些类而言都是如此。 – David

+0

您可以在AS3中创建一个全局变量,如下所示:http://stackoverflow.com/a/1860855/133840但我认为这不会满足您的需求。你几乎需要一个全局构造函数跟踪语句。您可能必须尽可能地在类层次结构中尽可能地修改该构造函数以添加代码。它可能涉及重新编译Flex框架。而且你必须为你所拥有的每个阶级层次做同样的事情;因为您将无法编辑主Flash“Object”类。我不确定这会起什么作用。 – JeffryHouser

回答

2

在mm.cfg文件中指定AS3Trace将使执行功能完全失效。

请参阅this blog post了解其他隐藏的mm.cfg功能,here is some help获取mm.cfg在您的移动应用中运行。

+0

太棒了!谢谢你,谢谢你的好链接。 – David

0

这里的东西接近你想要什么:你需要将它添加到您的主应用程序的initialize事件处理

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"); 
    });      
} 

+0

是的,非常好。有没有办法做到这一点,而不是在显示器上的类?我已经在上面添加了一个额外的说明。 – David

+0

我不认为这会给@David他想要的所有东西,因为这不是递归的,所以儿童的子女不在这里。其次,子组件的初始化事件将在父组件的初始化事件之前派发;所以初始化事件侦听器在initialize事件触发后添加。 – JeffryHouser

+0

好点,@Flextras。 – David