【问题标题】:Didn't get dijit.Tree to lazy loading没有让 dijit.Tree 延迟加载
【发布时间】: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].childrenparent.path[0] 是什么?

标签: grails lazy-loading dijit.tree


【解决方案1】:

还好我发现了很奇怪的问题……

嗯,我试过了:

    store.newItem(jsObj, parent);
    store.save();

解决办法:

    model.newItem(jsObj, parent);

我没有将项目添加到存储中,而是将其放入模型中,然后它就可以工作了。 我真的不知道为什么。也许有人可以向我解释。 谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    相关资源
    最近更新 更多