Не получил диджит. Дерево к ленивой загрузке
Мне нужно лениво загрузить каталоги в 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);
Вместо добавления элемента в хранилище, я помещаю его в модель, и тогда он работает. Я действительно не знаю почему. Может быть, кто-то может объяснить это мне. Спасибо