我想使用 XML 为我的应用程序中的元素保存一些配置。在我的示例中,我想将 6 个附加配置集添加到一个“主要”XML。每组可以是 config1 或 config2。在这种情况下,我添加了 3x config1 和 3x config2。如果我跟踪我的结果,我不仅会得到错误的元素顺序,还会得到一些“奇怪”的绑定行为。当然这是一个简化的例子。我的配置集更复杂(这就是为什么我为每个配置使用单独的 xml 对象)。
有人可以告诉我这应该如何工作吗?
谢谢,四字
<?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>