TreeGrid в jqGrid не работает должным образом - PullRequest
1 голос
/ 28 марта 2012

Я использую treegrid с jqGrid и совершенно новый для этого плагина. Я не могу заставить функцию TreeGrid работать должным образом. Первый раз, когда я нажимаю кнопку расширения, он работает нормально. В следующий раз, когда я нажимаю, чтобы свернуть, я получаю сообщение об ошибке JavaScript: $t.p.data[pos] is undefined Это в методе setTreeNode jqGrid.

Надеюсь, Олег или кто-то мне поможет или даст указатель.

Моя конфигурация следующая:

var grid = $("#grid").jqGrid({
    treeGrid: true,
    treeGridModel: 'adjacency',
    ExpandColumn: 'businessAreaName',
    ExpandColClick : true,
    url:'agileProgramme/records.do',
    datatype: 'json',
    mtype: 'GET',
    colNames:['Id'
              , 'Business Area'
              , 'Investment'
              , 'Org'
              , 'Goal'
    ],
    colModel:[
/*00*/          {name:'agileProgrammeId',index:'agileProgrammeId', width:0, editable:false,hidden:true},
/*01*/          {name:'businessAreaName',index:'businessAreaName', width:160, editable:false},
/*02*/          {name:'programmeName',index:'programmeName', width:150, editable:false, classes:'link'},
/*03*/          {name:'org',index:'org', width:50, editable:false, classes:'orgHierarchy', sortable : false},
/*04*/          {name:'goal',index:'goal', width:70, editable:false}
    ],
    treeReader : {
        level_field: "level",
        parent_id_field: "parent", 
        leaf_field: "leaf",
        expanded_field: "expanded"
    },
    autowidth: true,
    height: 240,
    pager: '#pager',
    sortname: 'id',
    sortorder: "asc",
    toolbar:[true,"top"],
    caption:"TableGridDemo",
    emptyrecords: "Empty records",
    loadonce: true,
    jsonReader : {
        root: "rows",
        page: "page",
        total: "total",
        records: "records",
        repeatitems: false,
        cell: "cell",
        id: "agileProgrammeId"
    }
});

Данные, возвращаемые при расширении столбца, приведены ниже.

{
   "page":"1",
   "total":"1",
   "records":"1",
   "rows":[
      {
         "agileProgrammeId":2,
         "businessAreaName":"child",
         "programmeName":"childSomething",
         "goal":null,
         "parent":1,
         "level":"1",
         "leaf":true,
         "expanded":false
      }
   ]
}

Вот данные, которые изначально загружены.

{
   "page":"1",
   "total":"1",
   "records":"1",
   "rows":[
      {
         "agileProgrammeId":1,
         "businessAreaName":"parent",
         "programmeName":"parentsomething",
         "goal":null,
         "parent":null,
         "level":"0",
         "leaf":false,
         "expanded":false
      }
   ]
}

1 Ответ

2 голосов
/ 28 марта 2012

Я отладил сетку с данными, которые вы разместили, и обнаружил, что причина в двух строках кода , где локальные данные удаляются в случае loadonce: true.

TreeGrid сохраняет предыдущие загруженные данные локально так же, как loadonce: true в случае «стандартной» сетки.Так что установка loadonce: true не имеет смысла в случае TreeGrid.Более того, как вы теперь знаете, настройка loadonce: true в случае TreeGrid имеет побочные эффекты.

Поэтому, чтобы решить вашу проблему, вам просто нужно удалить loadonce: true из определения TreeGrid.

ОБНОВЛЕНО: Я только что опубликовал предложение об устранении проблемы, которая возникла у вас в будущем.

...