Я хочу использовать 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>
, конечно, я вижу, что здесь происходит, но вопрос для меня: действительно ли он должен работать таким образом? , по моему мнению, нет смысла ссылаться на исходный объект, когда он добавляется к новому объекту (в случае XML). глядя на полученный в результате заказ «ошибка», сомнительно, если это было действительно оригинальное намерение. в любом случае: использование .copy() решает обе проблемы. проблема сортировки возникает только в том случае, если один объект ссылается несколько раз. Большое спасибо за помощь! – QuadWord
Предполагается, что он будет работать таким образом, потому что могут быть веские причины иметь ссылки вместо копий (есть модели, которым требуется более сложная иерархия, чем простая древовидная структура). В любом случае, я рад, что это помогло - пожалуйста, примите мой ответ, тогда :) – weltraumpirat
Я получаю вашу точку. но если это должно работать так, то appendChild также должен работать исправно с несколькими экземплярами и не добавлять их между существующими узлами :-) – QuadWord