【发布时间】:2012-09-05 13:00:37
【问题描述】:
我需要将目录延迟加载到位于dijit.form.Dialog 中的dijit.Tree 中。
我得到了根目录,我可以将它们放入带有根节点“计算机”的树中,
但我不知道如何让延迟加载工作。
当我单击一个节点时,我会调用一个函数,该函数会进行 ajax 调用以获取所选节点的子节点。我可以获取它们并将它们作为 JSON 呈现给 gsp(我认为它们格式正确)。但是当我尝试将它们放入商店时,它失败了。我无法让store.newItem() 工作。我真的不知道这是否是正确和最简单的方法。我搜索并尝试并失败了,不幸的是,我被卡住了。
我用:
- Grails 1.3.9
- Dojo 工具包 1.6
我如何将数据存储到 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
store、model和tree的定义:
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();
}
我尝试过这种方式,有一次,我删除了该项目,编辑了该项目并再次将其放入商店。但没有任何效果..
如果有人能给我任何见解,我将不胜感激!
【问题讨论】:
-
请显示一些关键代码。
-
我编辑了我的条目并在其中添加了一些代码。如果您需要更多,请询问
-
萤火虫控制台有什么错误吗?
-
@h4b0 : 是的,“dojo.data.ItemFileReadStore: Invalid item argument”,但我不知道什么是无效的
-
在
store.newItem()之前添加一些console.log输出:console.log(data)、console.log(data[i])、console.log(data[i].name)、console.log(data[i].path)和console.log(data[i].children。parent.path[0]是什么?
标签: grails lazy-loading dijit.tree