0

Flex 4.6 でカスタム アイテム レンダラーを作成し、JSON 形式のデータ ソースを使用する方法を試しています... 以下を使用して json データを取得すると、動作し、データに正常にアクセスできます。

myJSONdata[i].id
myJSONdata[i].username   etc...

しかし、このデータを、dataGroup に割り当てられた dataProvider に対して flex が期待するデータ型 (ArrayList、ArrayCollection?) にする方法を理解するのに問題があります。

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 として使用したいと考えています。

4

2 に答える 2

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 に配置する必要がある場合があります。

それが役立つことを願っています。

于 2013-04-06T13:26:19.957 に答える
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>
于 2016-01-12T14:53:08.557 に答える