dijit Tree JsonRest,新项目显示在所有节点上

时间:2016-09-13 09:18:54

标签: javascript rest tree dojo new-item

我想使用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"}

我不明白为什么在所有打开的节点下显示新项目。如果我执行删除操作,则会在树内删除新节点的所有表示。

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/