我試圖操縱從loadComplete事件的服務器獲取的數據:通過 爲什麼loadComplete在gridComplete之前觸發?
loadComplete:function(data){
alert("load completed");
$.each (data,function(index,item){
item["customerSite"]=item.header.customerName + '/'+item.header.siteDescription;
});
}
新加入的領域,就是要作爲一列進行分組不過,我不斷收到此列未定義爲分組標題。我嘗試將另一個字段添加到JSON對象作爲常規列,該列結束爲空。在我調試的時候,我注意到在loadComplete停止的斷點之前構建了網格。
我對loadComplete事件的理解是,只要ajax調用成功返回,它就會被觸發。在向我的代碼引入gridComplete事件後,我注意到gridComplete在loadComplete被調用之前被調用。
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的評論,我將使用自定義格式化程序。然而,這個列的結果不適用於組頭。如果我設置groupColumnShow:[真],列的數據是正確的,但仍然留下組頭被「未定義」
隨着電網的定義:
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;
}
謝謝奧列格!我希望loadComplete在網格內容準備好之前觸發。如果不是,我必須按照您的建議使用自定義格式化程序。我在我的問題主體中粘貼了網格的構建代碼。問題在於,即使格式化函數被很好地調用,組頭仍然顯示爲'未定義'。如果我設置了groupColumnShow:[true]而不是false,則該列將顯示正確的數據。在我看來格式化程序不起作用的分組標題.. – xueru 2011-05-16 18:07:01
@xueru:你可以發佈可用於重現問題的測試JSON數據嗎?可能是因爲'colModel'的'name'屬性內的點存在問題。 – Oleg 2011-05-16 18:45:03
您對正在分組的列的colModel的名稱屬性是正確的。我有'customerSite'列,但它不在從服務器獲取的json對象中。我試圖將它添加到loadComplete中的返回結果集中,因爲在我預期的時間內沒有調用它,使用自定義格式化程序的當前方法我需要爲列指定一個正確的名稱屬性。太感謝了!我希望Stackflow允許我向你發送一些咖啡作爲我的感謝。這將是一個很好的功能,爲Stackflow ... – xueru 2011-05-16 19:21:57