我在flex 4应用程序中放置了两个自定义组件
<preload:PreLoader horizontalCenter="0" verticalCenter="0" fontWeight="bold" fontSize="50" id="preLoader"/>
<util:Debug top ="0" right="0" id="debug"/>
根据MXML中添加的订单组件,Debug将保持最佳状态。
我的目的是始终将Debug组件保留在顶部
PreLoader组件具有初始化应用程序的所有逻辑,包括实例化某些类,实习生有逻辑将一些其他元素添加到应用程序中(如下所示)
FlexGlobals.topLevelApplication,addElement(someotherflexcomp);
现在,每次添加元素时,flex / AS的正常行为是新添加的元素将保持在displaylist之上。
所以我在主应用程序中编写了一个函数,当一个组件/元素被添加到主应用程序时需要调用它。
public function bringDebuggerFront():void{
if (numElements > 2){
swapElementsAt(numElements - 1,numElements - 2);
}
}
这里的想法是直截了当的,将最后一个N(最后一个元素)元素的显示位置与N-1元素交换,如果每次添加元素时调用它将是Debug组件。
所以,我需要添加一个额外的行来重新定位像这样的调试器寡妇
FlexGlobals.topLevelApplication,addElement(someotherflexcomp);
FlexGlobals.topLevelApplication.bringDebuggerFront();
目前不是一个大问题因为,目前我在运行时只添加了三个组件,但是我可能会在未来添加更多组件,而且我需要更多工作(注释或删除分散在多个位置的代码) )禁用此功能,仅用于调试。
为了避免这种情况,我附加了添加事件监听器,当我向应用程序添加一个元素时,假设要调用该事件监听器,但似乎这只是为我所拥有的两个组件调用添加到mxml中但在使用 addElement()方法将元素添加到应用程序时未调用
以下是我的主应用程序的完整代码
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:util="util.*" xmlns:preload="preload.*"
add="bringDebuggerFront()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<preload:PreLoader horizontalCenter="0" verticalCenter="0" fontWeight="bold" fontSize="50" id="preLoader"/>
<util:Debug top ="0" right="0" id="debug"/>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
public function bringDebuggerFront():void{
if (numElements > 2){
swapElementsAt(numElements - 1,numElements - 2);
}
}
]]>
</fx:Script>
</s:Application>
我甚至尝试使用添加事件,但我认为这是不正确的一个因为它的触发次数我假设被调用每个内部显示对象被添加并且也给出错误我没有深入细节
感谢您的帮助
答案 0 :(得分:2)
如果您使用的是Flex 4,则可以使用组件的深度属性
来实现