Не получил диджит. Дерево к ленивой загрузке

Мне нужно лениво загрузить каталоги в dijit.Tree который находится в dijit.form.Dialog, Я получаю корневые каталоги и могу поместить их в дерево с корневым узлом "Компьютер", но я не могу понять, как заставить работать ленивую загрузку.

Когда я нажимаю на узел, я вызываю функцию, которая делает ajax-вызов, чтобы получить дочерние элементы выбранного узла. Я могу получить их и визуализировать как JSON обратно в GSP (я думаю, что они хорошо сформированы). Но когда я пытаюсь положить их в магазин, это не удается. Я не могу получить store.newItem() работать. Я действительно не знаю, является ли это правильным и простым способом сделать это в любом случае. Я искал и пытался и потерпел неудачу и, к сожалению, я застрял.

Я использую:

  • Граальс 1.3.9
  • Dojo Toolkit 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

Определение магазина, модели и дерева:

    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(); 
    }   

Я попробовал это таким образом, и однажды я удалил элемент, отредактировал элемент и снова поместил его в магазин. Но ничего не получалось..

Если кто-нибудь может дать мне какие-либо идеи, я был бы признателен!

1 ответ

Решение

К счастью, я обнаружил очень странную проблему...

Ну, я попробовал:

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

Решение:

    model.newItem(jsObj, parent);

Вместо добавления элемента в хранилище, я помещаю его в модель, и тогда он работает. Я действительно не знаю почему. Может быть, кто-то может объяснить это мне. Спасибо

Другие вопросы по тегам