我正在尝试如何在flex 4.6中创建自定义项呈示器并拥有一个JSON格式的数据源...我使用以下方法检索json数据并且它可以工作,我可以正常访问数据
myJSONdata[i].id
myJSONdata[i].username etc...
但是在理解如何将这些数据作为flex期望的数据类型(ArrayList,ArrayCollection?)用于分配给dataGroup的dataProvider时遇到了问题。
public var loader:URLLoader = new URLLoader();
public var jsonContent:URLLoader;
public var myJSONdata:Object;
public var request:URLRequest;
public function Init():void {
request = new URLRequest("URL TO THE JSON DATA...");
loader.load(request);
loader.addEventListener(Event.COMPLETE, jsonLoaded);
}
public function jsonLoaded(event:Event):void {
jsonContent = URLLoader(event.target);
myJSONdata = JSON.parse(jsonContent.data);
trace(myJSONdata.length);
}
当我尝试像这样分配dataProvider时......
<s:DataGroup dataProvider="myJSONdata">
我收到此错误:
Initializer for 'dataProvider': values of type mx.collections.IList cannot be represented in text.
我想使用相同的数据访问功能,然后将该数据用作一个数组,然后我可以将其用作dataGroup的dataProvider。
答案 0 :(得分:1)
给出你的DataGroup和id,并在AS3中分配dataProvider,如下所示:
<s:DataGroup id="myDataGroup">
//in as3
myDataGroup.dataProvider = new ArrayCollection(myJSONdata);
或者您可以像在MXML中那样分配它,但是必须将变量名称包装在花括号中。
<s:DataGroup dataProvider="{myJSONdata}">
您收到该错误的原因是因为MXML将myJSONdata
视为普通字符串。
您可能仍需要将JSON数组放在ArrayCollection中,就像我在第一个示例中所做的那样。
希望有所帮助。
答案 1 :(得分:0)
虽然这篇文章很老但是这可能仍然有用,也许对其他人来说。
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
<s:HTTPService id="jsonLoader" result="jsonLoader_resultHandler(event)"
url="http://example.com/sample.json" />
</fx:Declarations>
<fx:Script>
<![CDATA[
import com.adobe.serializers.json.JSONDecoder;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
//<s:WindowedApplication .... creationComplete="initApp()">
public function initApp():void
{
//so trigger jsonLoader to load the json data from the link
// using the HTTPService immediately the application starts;
jsonLoader.send();
}
protected function jsonLoader_resultHandler(event:ResultEvent):void
{
var jsonContent:Object = (new JSONDecoder()).decode(event.result.toString());
//Assuming jsonContent.data is an Array
resultDataGrid.dataProvider = new ArrayCollection(jsonContent.data);
}
]]>
</fx:Script>