繁体   English   中英

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

[英]dijit Tree JsonRest, new Items shows on all Nodes

我想使用dojo / data / JsonRest来显示树。 从服务器加载工作正常,但是如果我添加新项目,则新项目将显示在每个开放式节点上。 向服务器发出请求,响应对我来说很好。 在服务器端,我将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"}

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

目标是使用缓存存储库提供查询存储库的所有方法。

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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM