ディレクトリを にある に遅延ロードする必要がありdijit.Tree
ますdijit.form.Dialog
。ルート ディレクトリを取得し、ルート ノード 'Computer' を使用してツリーに配置できますが、遅延読み込みを機能させる方法がわかりません。
ノードをクリックすると、選択したノードの子を取得するために ajax 呼び出しを行う関数が呼び出されます。それらをフェッチして、JSON としてレンダリングして gsp に戻すことができます (整形式だと思います)。しかし、それらをストアに入れようとすると失敗します。仕事に行けないstore.newItem()
。とにかく、これが正しくて最も簡単な方法であるかどうかはわかりません。検索して試して失敗しましたが、残念ながら行き詰まりました。
私が使う:
- グレイルズ 1.3.9
- 道場ツールキット 1.6
dataStore を gsp に取得する方法:
File [] roots = File.listRoots()
def item = []
roots.each{
item << [
name : it.getAbsolutePath(),
path : it.getAbsolutePath(),
children : []
]
}
def store = [
identifier: 'path',
label: 'name',
items: item
]
def retVal = [store: store]
render retVal as JSON
ストア、モデル、ツリーの定義:
function prepare(dataStore) {
var store = new dojo.data.ItemFileWriteStore({
data: dataStore
});
var treeModel = new dijit.tree.ForestStoreModel({
store: store,
rootId : "root",
rootLabel : "Computer",
childrenAttrs: ["children"]
});
var treeControl = new dijit.Tree({
id: 'directoryTree',
model: treeModel,
autoExpand: false,
onClick: loadDirectories
},
"treeOne");
}
ここで、ストアを編集しようとするコード、データはリストです:
data = [
[name: 'info', path: 'C:\temp\info', children: []]
[name: 'grmpf', path: 'C:\temp\grmpf', children: []]
...
]
for(i=0; i < data.length; i++){
store.newItem({name: data[i].name, path: data[i].path, children: data[i].children}, {parent: parent.path[0], attribute: 'children'});
store.save();
}
この方法で試してみて、一度アイテムを削除し、アイテムを編集してストアに入れ直しました。しかし、何も機能しませんでした..
誰かが私に何か洞察を与えることができれば、私はそれを感謝します!