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を参照
してください。