Flex - 将以mxml声明的子项添加到较低级别的容器中

时间:2011-02-24 15:00:50

标签: flex

我有一个自定义组件扩展组并包含一个viewstack子组件。该组件在actionscript中编码。

在mxml中实例化组件时,如下所示:

<components:CustomGroup width="100%" height="100%">
    <mx:HBox backgroundColor="0xDDFF11" width="100%" height="100%" />
    <mx:HBox backgroundColor="0x22DD63" width="100%" height="100%"/>
</components:CustomGroup>

...我想覆盖将子项添加到父组的任何函数,并将它们添加到子视图堆中,但我似乎无法找到添加发生的位置。 addChild和addElement中的断点表明在添加期间不会调用它们。

任何指示都会非常感激。 谢谢!

3 个答案:

答案 0 :(得分:1)

我设法通过覆盖函数mxmlContent(value:Array)来实现。该数组是父标记之间声明的所有子组件的数组。

让我有点担心的是,当逐步浏览adobe源代码时,我似乎已经多次通过它,但断点只有一次停止。

无论如何,除非我找到更好的解决方案,否则它必须暂时做。

答案 1 :(得分:0)

使用-keep-generated-actionscript标志编译项目。现在,您可以看到mxml代码如何转换为ActionScript。经过一些简短的调查后,我发现propertiesFactory函数在创建组件时似乎起了关键作用,但我找不到任何实现赋值,因为它只是一个公共函数变量。 :-/

答案 2 :(得分:0)

对于mxmlContent(值:Array)来说很多。好像它对我有用。这就是我在Sparc contaner

中带来视图堆栈特性的方法
public class DocumentViewer extends SkinnableContainer
{

    [SkinPart(required="true")]
    public var viewStack : ViewStack;

    override public function set mxmlContent(value : Array) : void
    {
        for each (var i : IVisualElement in value)
        {
            addElement(i);
        }
    }

    override public function addElement(element : IVisualElement) : IVisualElement
    {
        if ( element is NavigatorContent )
        {
            return viewStack.addElement(element);
        }
        else
        {
            var nc : NavigatorContent = new NavigatorContent();
            nc.addElement(element);
            return viewStack.addElement(nc);
        }
    }
}