我有一个自定义组件扩展组并包含一个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中的断点表明在添加期间不会调用它们。
任何指示都会非常感激。 谢谢!
答案 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);
}
}
}