jqGrid (v4.1.2) treegrid addChildNodes неправильно добавляет записи в сетку - PullRequest
1 голос
/ 15 сентября 2011

В настоящее время я работаю над созданием древовидной сетки, где я переопределяю функции данных, чтобы вызвать благотворительный сервис для заполнения данных.Идея состоит в том, что я загружаю только родительские узлы, и тогда, когда узел расширяется, он будет динамически вызывать благотворительный сервис для заполнения данных.Я столкнулся с некоторыми странностями, связанными с поведением сетки, когда я пытаюсь динамически загрузить дочерние элементы.Он прекрасно загрузит начальный список, но когда я иду к динамической загрузке дочернего элемента, он не добавляет его, когда родительский элемент раскрывается.Теперь, если вы развернете вторую запись, это добавит дочерний элемент в список в правильном положении, но он не увидит его как дочерний элемент 287.

Я не могу понять, что я делаю неправильнопри этом он не хочет правильно добавлять в качестве дочернего элемента.

// The data that is returned via thrift to fill in the initial entry in the table

{
"total" : "13″,
"page":"1″,
"records": "720″,
"rows" : [

{"id" : "287","cell" : ["287","MDXX00025",true,0,null,false,false] }
,{"id" : "544″,"isLeaf":true,"cell" : ["544","MDXX00460",true,0,null,false,false] }]
}

 // How jqGrid is configured with a oData object that contains the child I want to fill in.

var oData = { "rows" : [
{"id" : "7220","parent":287,"level":"1","isLeaf":true,"loaded":true,"empty":"MDXX00450" }]
};

function DoWork(postdata)
{
     var sData = client.NavigateTable(postdata._search,postdata.page,postdata.rows,postdata.sidx,

            postdata.sord,postdata.totalrows);
     var obj = jQuery.parseJSON(sData);
     var thegrid = jQuery("#addtree")[0];
     thegrid.addJSONData(obj);
}

function DoTreeWork(postdata)
{
     var thegrid = $("#addtree");
     thegrid.jqGrid ('addChildNode', oData.rows[0].id, oData.rows[0].parent, oData.rows[0]);
}

jQuery(document).ready(function(){

    $.jgrid.defaults = $.extend($.jgrid.defaults,{loadui:"enable"});
    jQuery("#addtree").jqGrid({
    datatype: function(postdata)
    {
        DoWork(postdata);
    },
    treedatatype: function (postdata)
    {
        DoTreeWork(postdata);
    },
    treeGrid: true,
    treeGridModel: 'adjacency',
       colNames:["id","empty","docno,"],
       colModel:[
        {name:'id',index:'id', width:20,key:true, editable:false},
        {name:'empty',index:'empty',width:10},
           {name:'docno',index:'docno', width:30, editable:true}
       ],
    pager : "#paddtree",
    treeGrid: true,
    ExpandColumn : 'name',
    editurl:'server.asp',
    viewrecords: true,
    autowidth: true,
    height:'400',
    rowNum:52,
    rowTotal:100,
    gridview: true,
    sortorder: "asc",
    sortname: 'id',
    caption: "Grid"
});
jQuery("#addtree").jqGrid('navGrid',"#paddtree",{edit:true,add:false,del:true,search:false});
});

Я также отметил, что те же данные, передаваемые в addJSONData, не будут работать с addChildNode.Я не уверен, является ли это намерением или просто упущением.Весь этот пример прекрасно работает, если все данные (родители и дети) передаются сразу в начало addJSONData.Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 04 сентября 2015
var orgExpandNode = $.fn.jqGrid.expandNode, 
    orgCollapseNode = $.fn.jqGrid.collapseNode;

    $.jgrid.extend({
        expandNode : function(rc) {
            if(this.getNodeChildren(rc).length===0){
             $.ajax({     
                 url : "http://localhost:8080/xx/",

                 success : function(data) {                    
                 var    result = data;                   
                 for(var i=0;i<result.length;i++){                      
                           grid.addChildNode(result[i].id,result[i].parent,result[i]); 
                 }
                 result=[];
                   }
             });   
            }
          return orgExpandNode.call(this, rc);
        },
    });
0 голосов
/ 18 июля 2012

У меня похожая проблема.когда я удаляю узел дерева, я добавляю к нему дочерние узлы, используя AddChildNode.но это не работает должным образом.Связь между родителем (удаленная строка) и дочерним (добавленные строки в событии ondrop) не работает.В качестве обходного решения вы удаляете удаленные строки и добавляете родительские и дочерние узлы.

...