我想使用XML保存我的應用程序中某些元素的配置。 在我的例子中,我想添加6個額外的配置集到一個「主」XML。每組可以是config1或config2。 在這種情況下,我添加了3x config1和3x config2。如果我追蹤我的結果,我不僅會得到錯誤的元素順序,還會出現一些「奇怪」的綁定行爲。 當然這是一個簡單的例子。我的配置集更復雜(這就是爲什麼我爲每個配置使用單獨的xml對象)。Flex 4.6 - XML appendChild意外行爲
有人可以告訴我這是應該如何工作?
感謝, 四字
<?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" applicationDPI="160" creationComplete="init();">
<fx:Declarations>
<fx:XML id="mainConfig" format="e4x">
<allConfigSets>
<viewconfig>Baseconfig</viewconfig>
</allConfigSets>
</fx:XML>
<fx:XML id="configSet1" format="e4x">
<configSet><viewconfig>Set1</viewconfig></configSet>
</fx:XML>
<fx:XML id="configSet2" format="e4x">
<configSet><viewconfig>Set2</viewconfig></configSet>
</fx:XML>
</fx:Declarations>
<fx:Script>
<![CDATA[
private function init(): void {
mainConfig.appendChild(configSet1.viewconfig);
mainConfig.appendChild(configSet1.viewconfig);
mainConfig.appendChild(configSet1.viewconfig);
mainConfig.appendChild(configSet2.viewconfig);
mainConfig.appendChild(configSet2.viewconfig);
mainConfig.appendChild(configSet2.viewconfig);
// trace1 (see below): trace shows wrong order of elements
trace (mainConfig);
// trace2:(see below): changing data on original configSet seems to bind into mainConfig
configSet1.viewconfig = "-";
trace (mainConfig);
}
]]>
</fx:Script>
</s:Application>
Trace1:
<allConfigSets>
<viewconfig>Baseconfig</viewconfig>
<viewconfig>Set1</viewconfig>
<viewconfig>Set2</viewconfig>
<viewconfig>Set2</viewconfig>
<viewconfig>Set2</viewconfig>
<viewconfig>Set1</viewconfig>
<viewconfig>Set1</viewconfig>
</allConfigSets>
Trace2:
<allConfigSets>
<viewconfig>Baseconfig</viewconfig>
<viewconfig>-</viewconfig>
<viewconfig>Set2</viewconfig>
<viewconfig>Set2</viewconfig>
<viewconfig>Set2</viewconfig>
<viewconfig>-</viewconfig>
<viewconfig>-</viewconfig>
</allConfigSets>
使用AS3 XML對象不解決這個問題:
private function init(): void {
var mainConfig:XML = <allConfigSets><viewconfig>0</viewconfig></allConfigSets>
var configSet1:XML = <configSet><viewconfig>1</viewconfig></configSet>
var configSet2:XML = <configSet><viewconfig>2</viewconfig></configSet>
mainConfig.appendChild(configSet1.viewconfig);
mainConfig.appendChild(configSet1.viewconfig);
mainConfig.appendChild(configSet1.viewconfig);
mainConfig.appendChild(configSet2.viewconfig);
mainConfig.appendChild(configSet2.viewconfig);
mainConfig.appendChild(configSet2.viewconfig);
// trace1 (see below): trace shows wrong order of elements
trace (mainConfig);
// trace2:(see below): changing data on original configSet seems to bind into mainConfig
configSet1.viewconfig = "-";
trace (mainConfig);
}
Trace1:
<allConfigSets>
<viewconfig>0</viewconfig>
<viewconfig>1</viewconfig>
<viewconfig>2</viewconfig>
<viewconfig>2</viewconfig>
<viewconfig>2</viewconfig>
<viewconfig>1</viewconfig>
<viewconfig>1</viewconfig>
</allConfigSets>
Trace2:
<allConfigSets>
<viewconfig>0</viewconfig>
<viewconfig>-</viewconfig>
<viewconfig>2</viewconfig>
<viewconfig>2</viewconfig>
<viewconfig>2</viewconfig>
<viewconfig>-</viewconfig>
<viewconfig>-</viewconfig>
</allConfigSets>
使用AS3 XML對象導致相同的行爲。如果一個xml被第二次追加,它不會追加在最後,而是在索引(1)上。同時更改原始對象將自動更改mainconfig對象。 – QuadWord 2011-12-14 14:41:20
該問題與綁定完全無關。你應該刪除這個答案。 – weltraumpirat 2011-12-14 15:38:17