JQGrid Subgrid не загружается, если для loadonce установлено значение true - PullRequest
1 голос
/ 15 апреля 2011

У меня есть JQGrid с подсеткой (простой, а не в виде сетки), которая до вчерашнего дня работала нормально.Затем я обнаружил мощный флаг loadonce = true, который дает мне бесплатную нумерацию страниц, поиск и т. Д.Но так как я включил loadonce, подсетка перестала работать, и когда я нажимаю на плюс, чтобы развернуть строку, появляется окно загрузки, и оно не исчезает.Если я удаляю loadonce = true, все работает, как ожидалось.Вот мой javascript, заранее спасибо.

$("#testsTable").jqGrid({
    mtype: "POST",
    url: "GetCurrentStatusServlet",
    datatype: "xml",
    colNames:['Suite', 'Test Case', 'Last Update', 'Status','Actions'],
    colModel:[
              {name:'suite',index:'suite', width:50, sorttype:"int"},
              {name:'name',index:'name', width:300, formatter:nameFmatter},
              {name:'lastupdate',index:'lastupdate', width:150, formatter:"date"},
              {name:'status',index:'status', width:50, formatter: fmt_status,align:"center"},
              {name:'act',index:'act', width:100, align:"left"} 
              ],
              rowNum:150,
              width:1200,
              height:800,
              rowList:[150,300,500],
              pager: $('#pager1'),
              viewrecords: true,
              multiselect: true,
              caption: buildName,
              sortorder: "asc",
              sortname: "suite",
              subGrid: true,
              subGridUrl : "GetCurrentSubGridStatusServlet",
              subGridType: "xml",
              subGridModel: [ {
                  name:  ['Test Method', 'Last Update', 'Status'],
                  width : [250, 200, 100],
                  params: ['name']
              }],
            loadonce: true,
                  gridComplete: function(){
                      var ids = $("#testsTable").jqGrid('getDataIDs');
                      for(var i=0;i < ids.length;i++){
                          var cl = ids[i];

                          var test = new Array();
                          test.push($("#testsTable").getCell(cl, 'name'));
                          run = "<button class=\"runBtn\" onclick=\"runTests('"+test+"')\">Run</>"; 
                          log = "<button class=\"logBtn\" onclick=\";\">Log</>"; 
                          $("#testsTable").jqGrid('setRowData',ids[i],{act:run+log});
                      } 
                      setupButtons();
                  }
});
$("#testsTable").jqGrid('navGrid','#pager1',{add:false,edit:false,del:false});

1 Ответ

4 голосов
/ 16 апреля 2011

После некоторой отладки я обнаружил, что ваша ошибка очень проста: в вашей сетке вы используете

subGridType: "xml"

вместо правильного

subgridtype: "xml"

(см. документацию ).Таким образом, неизвестный параметр subGridType будет просто проигнорирован в вашей текущей сетке, и будет использовано значение datatype.Значение datatype меняется на local после первой загрузки сетки в случае использования loadonce:true.

Кроме того, я бы рекомендовал использовать ненавязчивый JavaScript , чтобы сделать 'нажмите «привязка.Ваша текущая реализация очень медленная, если в сетке будет много строк.См. ответ , в котором описан более эффективный способ.

...