diff --git a/haxe/ui/data/DataSourceFactory.hx b/haxe/ui/data/DataSourceFactory.hx index 874143439..6c4f4f7f6 100644 --- a/haxe/ui/data/DataSourceFactory.hx +++ b/haxe/ui/data/DataSourceFactory.hx @@ -32,6 +32,24 @@ class DataSourceFactory { return ds; } + public function fromStringToArray(data:String):Array { + var array:Array = []; + if (StringTools.startsWith(data, "<")) { // xml + var xml:Xml = Xml.parse(data).firstElement(); + for (el in xml.elements()) { + var o:Dynamic = xml2Object(el); + array.push(o); + } + } else if (StringTools.startsWith(data, "[")) { // json array + var json:Array = Json.parse(StringTools.replace(data, "'", "\"")); + for (o in json) { + array.push(o); + } + } + + return array; + } + private function xml2Object(el:Xml, addId:Bool = true):Dynamic { var o = {}; diff --git a/haxe/ui/macros/ComponentMacros.hx b/haxe/ui/macros/ComponentMacros.hx index 5870a58a4..53d5b3254 100644 --- a/haxe/ui/macros/ComponentMacros.hx +++ b/haxe/ui/macros/ComponentMacros.hx @@ -957,10 +957,9 @@ class ComponentMacros { } private static function buildDataSourceCode(builder:CodeBuilder, c:ComponentInfo, dsVarName:String, componentVarName:String) { - var ds = new haxe.ui.data.DataSourceFactory().fromString(c.dataString, haxe.ui.data.ArrayDataSource); + var items = new haxe.ui.data.DataSourceFactory().fromStringToArray(c.dataString); builder.add(macro var $dsVarName = new haxe.ui.data.ArrayDataSource()); - for (i in 0...ds.size) { - var item = ds.get(i); + for (item in items) { var hasExpression:Bool = false; // lets first find out if any of the items are expressions for (f in Reflect.fields(item)) {