asuri
14.02.2007, 22:53
Добрый вечер всем.
Хочу формировать налету ArrayCollection. Изначально данные забираю с сервера в виде XML.
Трабла в том, что ArrayCollection должен быть вида:
<mx:ArrayCollection id="mxarr">
<mx:Object label="ColName1" text="3 jj gehg"/>
<mx:Object label="ColName2" text="32ggehg"/>
</mx:ArrayCollection>
атрибуты (label,text) и прочие хранятся в массиве headers.
При этом я не могу динамически создать у элементов ArrayCollection аттрибуды с соответствующими именами.
То есть надо сделать что то вроде:
var MyXML:XML;
var headers:Array=new Array("label","data");
MyXML = new XML('<root><node id="MyNode" /></root>');
MyXML.node.@headers[0]='bla bla bla';
но разумеется строка MyXML.node.@headers[0]='bla bla bla'; не прокатывает.
Вопрос №1 - какая есть альтернатива этой строке.
Вопрос №2 - если сделать trace(MyXML.children()); то результат - пустая строка. Почему так???
Что бы лучше было все понятно - привожу полный код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
public function test_xml():void{
var ac:ArrayCollection;
var tmp:Array;
var MyXML:XML;
var headers:Array=new Array("id","title");
MyXML = new XML('<root><node id="MyNode" /></root>');
MyXML.node.@label='txt';
trace(MyXML.children());
tmp=new Array(MyXML);
ac = new ArrayCollection(tmp);
trace('\n=============\n');
show(ac);
// show(mxarr);
}
public function show(obj:ArrayCollection):void{
for(var i:int=0;i<obj.length;i++){
trace('obj['+i+']=Array(');
var a:Object;
for(a in obj[i]){
trace(' '+a+' => '+obj[i][a]+'\a');
}
trace(');\n');
}
}
]]>
</mx:Script>
<mx:ArrayCollection id="mxarr">
<mx:Object id="a" label="lab1" text="3 jj gehg"/>
<mx:Object id="b" label="lab2" text="32ggehg"/>
</mx:ArrayCollection>
<mx:Button label="test" click="test_xml();" x="100" y="100"/>
</mx:Application>
Хочу формировать налету ArrayCollection. Изначально данные забираю с сервера в виде XML.
Трабла в том, что ArrayCollection должен быть вида:
<mx:ArrayCollection id="mxarr">
<mx:Object label="ColName1" text="3 jj gehg"/>
<mx:Object label="ColName2" text="32ggehg"/>
</mx:ArrayCollection>
атрибуты (label,text) и прочие хранятся в массиве headers.
При этом я не могу динамически создать у элементов ArrayCollection аттрибуды с соответствующими именами.
То есть надо сделать что то вроде:
var MyXML:XML;
var headers:Array=new Array("label","data");
MyXML = new XML('<root><node id="MyNode" /></root>');
MyXML.node.@headers[0]='bla bla bla';
но разумеется строка MyXML.node.@headers[0]='bla bla bla'; не прокатывает.
Вопрос №1 - какая есть альтернатива этой строке.
Вопрос №2 - если сделать trace(MyXML.children()); то результат - пустая строка. Почему так???
Что бы лучше было все понятно - привожу полный код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
public function test_xml():void{
var ac:ArrayCollection;
var tmp:Array;
var MyXML:XML;
var headers:Array=new Array("id","title");
MyXML = new XML('<root><node id="MyNode" /></root>');
MyXML.node.@label='txt';
trace(MyXML.children());
tmp=new Array(MyXML);
ac = new ArrayCollection(tmp);
trace('\n=============\n');
show(ac);
// show(mxarr);
}
public function show(obj:ArrayCollection):void{
for(var i:int=0;i<obj.length;i++){
trace('obj['+i+']=Array(');
var a:Object;
for(a in obj[i]){
trace(' '+a+' => '+obj[i][a]+'\a');
}
trace(');\n');
}
}
]]>
</mx:Script>
<mx:ArrayCollection id="mxarr">
<mx:Object id="a" label="lab1" text="3 jj gehg"/>
<mx:Object id="b" label="lab2" text="32ggehg"/>
</mx:ArrayCollection>
<mx:Button label="test" click="test_xml();" x="100" y="100"/>
</mx:Application>