我想知道是否有人可以看看这段代码,并告诉我为什么在从同一文档调用removeSelectedChild时会调用removeSelectedChild工作,但在从子文档调用时返回以下错误/零件。Flex:方法在parentDocument上调用时不起作用
“ArgumentError:错误#2025:提供的DisplayObject必须是调用者的孩子。”
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Accordion id="myAccordion"
width="100%" height="100%"
selectedIndex="0">
<mx:Script>
<![CDATA[
public function removeSelectedChild():void {
trace("before");
try {
myAccordion.selectedChild.parent.removeChild(myAccordion.selectedChild)
} catch(err:ReferenceError) {
trace("catch")
}
trace("after");
}
]]>
</mx:Script>
<mx:headerRenderer>
<mx:Component>
<mx:Button click="{ parentDocument.removeSelectedChild() }" />
</mx:Component>
</mx:headerRenderer>
<mx:HBox>
<mx:Button click="{ removeSelectedChild() }" />
</mx:HBox>
</mx:Accordion>
</mx:Application>
点击在孩子的按钮产生预期的结果,而点击标题删除预期的孩子,但也将引发一个错误,尽管事实上它们都调用同一个方法。
对不起,这个例子是有点人为的,这个问题出现在一个相当复杂的视角,这是使用各种自定义组件。这是我能够以一种方式展示它的唯一方式,这种方式可以让您快速编译,并且易于专注于真实问题而无背景噪音。
我拉着我的头发在这一个,并会真正感激它,如果任何人都可以帮助。
更新:我现在发现在方法执行完成后触发异常。请参阅上面的跟踪说明。在抛出异常之前追踪“之后”。
干杯,
克里斯
不,这也不能工作。看起来它必须是一个Flex错误。 – ChrisInCambo 2010-05-08 23:42:06
是的,你不能做'child.parent.removeChild(child)'似乎很奇怪。 – Theo 2010-05-09 09:38:17