【发布时间】:2012-11-30 12:02:48
【问题描述】:
我在 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
列表为空的原因是xml是在在 HomeListView被激活之后加载的。因此,有一种方法可以获取所有这些信息,而不必在课后的课堂上写下来,这将是有帮助的。请注意,并非所有类都在显示列表中(例如 Model 和 XMLLoader)。
【问题讨论】:
-
执行顺序是什么?你在用 Flex 吗?如果是这样,Flex 组件生命周期控制生命周期方法的执行顺序,您可能需要花一些时间阅读有关它的内容。我认为大多数课程——无论是否是 Flex——都会发送一个“addToStage”事件。但是,在这种情况下,我不清楚这是否符合您对“负载”的定义。
-
是的,使用 Flex,是的,我了解生命周期——这就是我所说的“确定初始化顺序”等。假设我有 100 个类。我要问的是是否有办法编写一行或几行代码并让每个类都跟踪“我的构造函数正在运行!”而不必经历并创建 100 次跟踪语句。对于不在显示列表中的类也是如此。
-
您可以像这样在 AS3 中创建一个全局变量:stackoverflow.com/a/1860855/133840,但我认为这不会满足您的需要。您几乎需要一个全局构造函数跟踪语句。您可能必须尽可能地在类层次结构中向上并调整该构造函数以添加您的代码。它可能涉及重新编译 Flex 框架。你必须对你拥有的每个类层次结构做同样的事情;因为您将无法编辑主 Flash“对象”类。我不确定这会起到什么作用。
标签: actionscript-3 apache-flex flash-builder