Более простой способ сделать все это (правда, не с указанными вами метками) - просто использовать встроенный в ActionScript метод ObjectUtil.toString.
Вы бы написали что-то вроде этого:
import mx.utils.ObjectUtil;
public function dumpObj():void {
myTextField.text = ObjectUtil.toString(obj);
}
Это должно в значительной степени распечатать каждое свойство каждого имеющегося у вас множественного / вложенного объекта.
ОДНАКО - вы должны внести фундаментальные изменения в свой компонент, если хотите, чтобы он был повторно использован. Вам нужен геттер / сеттер для вашей коллекции. В компонент добавьте этот код:
[Bindable]
private var _myCollection:ArrayCollection;
public function set myCollection (data:ArrayCollection) : void {
_myCollection = data;
}
public function get myCollection () : ArrayCollection {
return _myCollection;
}
Есть несколько других способов сделать это - посмотрите, если вам нужно что-то другое.
В вашей таблице данных используйте закрытую переменную ArrayCollection, например:
<mx:DataGrid id="compras" x="0" y="0" width="556" dataProvider="{_myCollection}" editable="false">
<mx:columns>
<mx:DataGridColumn headerText="ID" dataField="tinteiroid" visible="false"/>
...
В основном приложении вы можете заполнить свой компонент следующим образом:
<kgtm:myComponent x="0" y="20" myCollection="{queryDataAC}"
И вы называете свой ArrayCollection следующим образом:
<mx:ArrayCollection id="queryDataAC">
в коде приложения верхнего уровня вы определяете пространство имен kgtm, чтобы вы могли использовать свой пользовательский компонент, например:
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:kgtm="com.kgtm.*"
Затем поместите ваш компонент в папку, соответствующую этому определению пространства имен.
Все это приводит к конечной утилите печати объектов, которую вы определяете для компонента, поскольку это единственная вещь, которая должна знать о том, как распечатывать свои данные.
Определите публичную функцию и заставьте ее распечатать частные данные ArrayCollection, используя ObjectUtil или ваш собственный метод.
public var getLastQueryOutput (): String {
private var output:String = "";
private var len:int = _myCollection.length;
for (var i:int = 0; i <len; i++) {
output = output +
"TinteiroID:"+_myCollection[i].tinteiroid+
"#TinteiroLABEL:"+_myCollection[i].label+
"#TinteiroREF:"+_myCollection[i].ref+
"#TinteiroMARCA:"+_myCollection[i].marca+
"#TinteiroGENERO:"+_myCollection[i].genero+
"#TinteiroQUANTIDADE:"+_myCollection[i].quantidade+
"#FIMPROD#";
}
trace(output);
}
Надеюсь, это поможет. Если вы называете объект правильно, когда вы помещаете его в ArrayCollection, вы снова можете просто использовать ObjectUtil, как я указывал вверху.
Casp - Проверьте больше моих (и моих коллег) записей в блоге здесь