我想知道是否有人可以看看這段代碼,並告訴我爲什麼在從同一文檔調用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