我想使用 dojo/data/JsonRest 来显示一棵树。从服务器加载工作正常,但如果我添加一个新项目,新项目会显示在每个 openend 节点上。该请求是向服务器发出的,响应对我来说看起来不错。在服务器端,我使用 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"}
我不明白为什么新项目显示在所有打开的节点下。如果我进行删除,则新节点的所有表示都将在树内删除。