Jqgrid 为什么loadComplete在gridComplete之前启动?

Jqgrid 为什么loadComplete在gridComplete之前启动?,jqgrid,Jqgrid,我试图在loadComplete事件中操作从服务器获取的数据: loadComplete:function(data){ alert("load completed"); $.each (data,function(index,item){ item["customerSite"]=item.header.customerName + ' / '+item.header.siteDescription; }); } 新添加的字段将用作要分组的列 然而,我一直得

我试图在loadComplete事件中操作从服务器获取的数据:

loadComplete:function(data){
    alert("load completed");
    $.each (data,function(index,item){

    item["customerSite"]=item.header.customerName + ' / '+item.header.siteDescription;
    });
}
新添加的字段将用作要分组的列 然而,我一直得到这个列作为未定义的分组头。我尝试将另一个字段作为常规列添加到JSON对象中,该列最终为空。在调试时,我注意到网格是在loadComplete中的断点停止之前构建的

我对loadComplete事件的理解是,一旦ajax调用返回成功,它就会立即触发。在代码中引入gridComplete事件之后,我注意到在调用loadComplete之前调用了gridComplete

gridComplete: function(){ 
    alert("grid completed");
}
我做错了什么?我正在使用

            jsonReader: {
                repeatitems: false,
                id: "id",
                root: function (obj) { return obj; },
                page: function (obj) { return 1; },
                total: function (obj) { return 1; },
                records: function (obj) { return obj.length; }
            }
处理返回的JSON字符串,但无法想象这可能是问题所在。请帮忙

根据Oleg的评论,我将使用自定义格式化程序。但是,fomratter的结果不适用于此列所针对的组标题。如果我设置groupColumnShow:[true],则列的数据都是正确的,但仍将组标题保留为“未定义”

以下是网格的定义:

buildGrid:function(){
        var myGrid = jQuery("#serverList");

        myGrid.jqGrid({

        datatype: "json",
        url: "http://localhost:8080/cm.server/api/v1/agent/config.json?",
        jsonReader: {
            repeatitems: false,
            id: "id",
            root: function (obj) { return obj; },
            page: function (obj) { return 1; },
            total: function (obj) { return 1; },
            records: function (obj) { return obj.length; }
        },              
        colNames:['Customer/Site','Customer','Site','Server ID', 'Server Name', ,'id'],

        colModel :[ 
              {name:'customerSite',editable:false, formatter:that.buildCustmerSite},   
              {name:'header.customerName',hidden:true,editable:true,editrules:{edithidden:true},editoptions:{readonly:true,size:25},formoptions:{ rowpos:1,elmprefix:" "}},

              {name:'header.siteDescription', hidden:true, editable:true,editrules:{edithidden:true},editoptions:{readonly:true,size:25},formoptions:{ rowpos:2,elmprefix:" "}},         

              {name:'header.serverID', index:'header.serverID', width:200, align:'right',editable:true,editoptions:{readonly:true,size:25},formoptions:{ rowpos:3,elmprefix:" "}},

              {name:'header.serverName', index:'header.serverName', width:150, align:'right',editable:true,editoptions:{readonly:true,size:25},formoptions:{ rowpos:4,elmprefix:" "}},

              {name:'id', hidden:true},

            ],
            height: '500',
            width: '100%',
            rowNum:20,
            autowidth: true,
            pager: '#pager',
            sortname: 'serverID',
            sortorder: "desc",
            viewrecords: true,
            caption: 'Server Configurations',
            editurl:"/cm.server/api/v1/agent/config-grid",
            autoencode:true,
            ignoreCase:true,
            grouping:true,
            groupingView:{
                groupField:['customerSite'],
                groupColumnShow : [false]
            }
          });

      jQuery("#serverList").jqGrid('navGrid','#pager',
      {edit:true,add:false,del:false,search:true}, 
      {height:450,reloadAfterSubmit:true,  recreateForm:true,jqModal:true, closeOnEscape:true,  closeAfterEdit:true, bottominfo:"Fields marked with (*) are required"}, // edit options
            {} // search options
        );
      jQuery("#serverList").jqGrid('filterToolbar'); 
      return true;
    }
以下是自定义格式化程序:

buildCustmerSite:function(cellvalue,options,rowObject){
    var customerSite =rowObject.header['customerName'] + '/'+ rowObject.header["siteDescription"];
    return customerSite;
}

loadsplete
gridComplete
之间存在细微差异,但在准备网格包含后,两者都将被称为。因此,您不能只修改
loadsplate
data
来更改网格包含


您没有发布网格的定义,因此很难准确回答您的问题。您可能需要的内容可以通过为
customerSite
列定义的内容来解决。在formatter函数中,您可以访问
rowObject
,从中可以找到构建
客户名称的源信息
+/'+
站点描述

谢谢Oleg!我希望loadComplete在网格内容准备好之前被触发。如果不是,我必须按照您的建议使用自定义格式化程序。我已将网格的构造代码粘贴到问题正文中。问题是,即使很好地调用了格式化程序函数,组头仍然显示为“未定义”。如果我设置groupColumnShow:[true]而不是false,则该列将显示正确的数据。在我看来,格式化程序对分组头不起作用。@xueru:你能发布测试JSON数据吗?该数据可用于重现问题?问题可能是由于
colModel
name
属性中的点而存在的。关于要分组的列的colModel的name属性,您是对的。我为该列设置了“customerSite”,但它不在从服务器获取的json对象中。我试图将其添加到loadComplete中的返回结果集中,因为它没有在我预期的时间调用,使用当前的方法使用自定义格式化程序,我需要为列指定一个正确的名称属性。万分感谢!我希望Stackflow允许我给你寄一些咖啡的信用卡作为我的感谢。这将是Stackflow的一个很好的功能…@xueru:不客气!听说我能帮助你,我很高兴。你的好话比金钱更好。加油!为我的健康干杯,我们就扯平了。祝你好运