0

for each ループを使用して、ajax を使用して json ファイルから返された各データのアコーディオン コンテナーを作成するにはどうすればよいですか?

私はこれを試しました!それはそれへの道ですか?

dojo.xhrGet({
    url:"json/"file_Name".json",
    handleAs: "json",
    timeout: 10000,
    load: function(response,details){
        container(response)},
    error: function(error_msg,details){
        container(error_msg, details);
    }

    });

         //how do i use the json file to add data to the array arrFruit and then create dijit accordian container for every data in the array//
    container = function(array, domConstruct) {

      var arrFruit = ["apples", "kiwis", "pineapples"];
      array.forEach(arrFruit, function(item, i){
            domConstruct.create("li", {innerHTML: i+1+". "+item}, "properties");
      });



    };
     //the response data from my json file is:-
     [
{
    "itemId": 1234,
    "Name": "Name",
            }]
4

1 に答える 1

0

ItemFileReadStore を活用するように書き直すことをお勧めします。Store は、アイテムを ID で取り出すことができるデータ コンテナーです。これは、json を少し変更して、識別子とは何か、もしあれば、子の属性キーとは何かを説明する必要があることを意味します。

JSON:

{
  identifier: 'itemId',
  // you dont seem to have child references any but these are defaults
  childrenAttrs: ['items', 'children'],
  items: [
    {
     itemId: 1234,
     name: 'Name'
    }, {
       ...
    }
  ]
}

次に、コードで .xhr を使用する代わりに、次のようにストアで .fetch を使用します。

// 1.7+ syntax, pulling in dependencies. 
// We want accordion and some other display widget like contentpane.
// Also we await domReady before calling our function
require(["dojo/data/ItemFileReadStore", "dijit/layout/AccordionContainer", "dijit/layout/ContentPane", "dojo/domReady!"], function(itemStore, accordion, contenpane) {

  // this section is called when loading of itemstore dependencies are done
  // create store
  var store = new itemStore({
    url:"json/"file_Name".json"
  });
  // create container
  var acc = new accordion({style:"height: 300px"}, 'someDomNodeId');

  // call XHR via .fetch and assign onComplete (opposed to 'load') callback
  store.fetch({ onComplete: function(items) {

    // items is an array of all the objects kept in jsonObject.items array
    items.forEach(function(item) {
       acc.addChild(new contentpane({
          title: "Name for id: " + store.getValue(item, 'itemId'),
          content: store.getValue(item, 'name')
       }));
    });
  console.log(acc.getChildren()); // << would print out an array of contentpane widgets
  });
});

これはハウツーです:) いつでもストアを使用していくつかのアイテムを取得できます。たとえば、特定のものを除外したい場合は、次のように .query を呼び出します。store.fetch({query: { name: '*foo'/*all item.name ending with foo*/ }, onComplete: function(items) { /*cb func*/});

http://livedocs.dojotoolkit.org/dijit/layout/AccordionContainer#programmatic-example および http://livedocs.dojotoolkit.org/dojo/data/ItemFileReadStoreを参照 してください。

于 2012-05-18T11:12:28.157 に答える