我想使用dojo / data / JsonRest来显示树。 从服务器加载工作正常,但如果我添加一个新项目,新项目将显示在每个openend节点上。请求发送给服务器,响应对我来说很好。 在Serverside上我使用PHP和SlimFramwork
Javascript如下:
require([
"dojo/parser",
"dojo/_base/array",
"dojo/on",
"dijit/registry",
"dojo/store/JsonRest",
"dojo/store/Observable",
"dijit/Tree",
"dijit/tree/ObjectStoreModel",
"dijit/form/Button",
"dojo/domReady!"
], function(parser, array, on, registry, JsonRest, Observable, Tree, ObjectStoreModel
){
parser.parse();
var reststore = new JsonRest({
target: "Antrag/",
getChildren: function(object){
console.dir(object);
return this.query({parent: object.id});
}
});
var reststore=new Observable(reststore);
var treeModel = new ObjectStoreModel({
store: reststore,
//labelAttr: "anzeige",
query: {
jahr: 2015,
nummer: 1,
antArt: 1,
kb: 58,
antArt: 1,
tree: true
},
mayHaveChildren: function(object){
return true;
},
getLabel : function(item) {
console.dir(item);
console.log(item.typ);
if(item!=null){
//console.dir(item);
if (item.typ == "KE") {
if (item.posten == "0") {
rueckgabe = "Keine Postennr";
} else {
rueckgabe = item.posten;
}
} else if (item.typ == "KD" || item.typ == "NL" || item.typ == "ADDR") {
//console.log(item.typ+" "+item.Bezeichnung);
rueckgabe = item.Bezeichnung;
} else if (item.typ.substring(0,6)=="antrag") {
this._antrag=item;
rueckgabe = item.anzeige;
} else {
//console.log(item.typ+" "+item.anzeige);
rueckgabe = item.anzeige;
}
return rueckgabe;
}else{
return false;
}
},
});
var tree = new dijit.Tree({
model : treeModel,
autoExpand: true
}, 'treeNode');
tree.startup();
on(registry.byId('butAdd'), "click", function(e){
var selectedObject = tree.get("selectedItems")[0];
var LS={
typ: "LS",
//antrag: selectedObject.id,
//antrag: this._antrag.id,
berechnung: selectedObject.id,
neu: true,
//parent: selectedObject.id
};
reststore.put({
typ: "LS",
//antrag: selectedObject.id,
//antrag: this._antrag.id,
berechnung: selectedObject.id,
neu: true,
}, {parent: selectedObject});
})
});
启动时加载的所有项目看起来都很好。一切都在正确的地方。
新项目的请求(来自Web-Developer)如下所示:
berechnung:"Rech234647"
neu:true
typ:"LS"
服务器的响应是:
{"id":"LS234647_1","berechnungId":"234647","typ":"LS","parent":"Rech234647",anzeige":"Lieferschein 1"}
我不明白为什么在所有打开的节点下显示新项目。如果我执行删除操作,则会在树内删除新节点的所有表示。
答案 0 :(得分:0)
目标是使用Cachestore提供查询商店的所有方法。
require([
"dojo/parser",
"dojo/_base/array",
"dojo/on",
"dijit/registry",
"dojo/store/JsonRest",
"dojo/store/Memory",
"dojo/store/Observable",
"dojo/store/Cache",
"dijit/Tree",
"dijit/tree/ObjectStoreModel",
"dijit/form/Button",
"dojo/domReady!"
], function(parser, array, on, registry, JsonRest, Memory, Observable, Cache, Tree, ObjectStoreModel
){
parser.parse();
var reststore1 = new JsonRest({
target: "Antrag/",
getChildren: function(object){
console.dir(object);
return this.query({parent: object.id});
}
});
var memorystore=new Memory();
var reststore=new Observable(new Cache(reststore1, memorystore));
var treeModel = new ObjectStoreModel({
store: reststore,
query: {
jahr: 2015,
nummer: 1,
antArt: 1,
kb: 58,
antArt: 1,
tree: true
},
mayHaveChildren: function(object){
return true;
},
getLabel : function(item) {
console.dir(item);
console.log(item.typ);
if(item!=null){
if (item.typ == "KE") {
if (item.posten == "0") {
rueckgabe = "Keine Postennr";
} else {
rueckgabe = item.posten;
}
} else if (item.typ == "KD" || item.typ == "NL" || item.typ == "ADDR") {
rueckgabe = item.Bezeichnung;
} else if (item.typ.substring(0,6)=="antrag") {
this._antrag=item;
rueckgabe = item.anzeige;
} else {
rueckgabe = item.anzeige;
}
return rueckgabe;
}else{
return false;
}
},
});
var tree = new dijit.Tree({
model : treeModel,
autoExpand: true
}, 'treeNode');
tree.startup();
on(registry.byId('butAdd'), "click", function(e){
var selectedObject = tree.get("selectedItems")[0];
var LS={
typ: "LS",
berechnung: selectedObject.id,
neu: true,
};
reststore.put({
typ: "LS",
berechnung: selectedObject.id,
neu: true,
}, {parent: selectedObject});
})
});
我会更新我的小提琴http://jsfiddle.net/jp14psez/31/