我有一个子网格,当你点击“Cheese”旁边的“+”符号时,ajax查询会触发,我会看到子网格列名,但是实际数据没有填充到子网格中。无论我尝试扩展哪个网格,问题都会发生,但“Cheese”示例如下所示。
您可以在屏幕截图中看到FireBug输出底部的XML响应。我已经阅读了XML,它看起来是有效的。在预感中,我还将XML输出粘贴到this page中,它似乎缩进得很好。最重要的是,我还有ajax调用返回一些非常基本的值,无论我到目前为止尝试过什么,网格仍然是空的。
您应该在子网格中看到的是:
------------------------------------------------------
|Translations | Language | Active |
------------------------------------------------------
| It's cheesy goodness | EN | No |
| fromage | FR | No |
| | DE | N/A | <-- "N/A" means there's no translation of "cheese" in German, currently in the database
... etc., with all supported languages listed.
子网格的代码是:
$("#translationsList").jqGrid({
caption : "Translations",
datatype : "xml",
url : translationsFeed,
editurl : translationsEdit,
mtype : "get",
pager : "#translationsPager",
rowNum : 20,
autowidth : true,
sortname : "phrase",
sortorder : "asc",
viewrecords : true,
multiselect : false,
hidegrid : false,
height : 300,
altRows : true,
rownumbers : true,
toolbar : [false],
colNames : ["phrase_id", "translation_id", "language_cd", "Phrase", "Translation", "Created", "Modified", "Active"],
colModel : [
{ name : "phrase_id", index : "phrase_id", sortable : true, search : false, editable : true, edittype : "text", editrules: { edithidden :true }, hidden : true},
{ name : "translation_id", index : "translation_id", sortable : false, search : false, editable : true, edittype : "text", editrules: { edithidden :true }, hidden : true},
{ name : "language_cd", index : "language_cd", sortable : true, search : true, editable : true, edittype : "text", editrules: { edithidden: true, required : true }, hidden : true },
{ name : "Phrase", width:200, index : "phrase", sortable : true, search : true, editable : true, edittype : "text", editrules: { required : true } },
{ name : "Translation", width:200, index : "translation", sortable : true, search : true, editable : true, edittype : "text", editrules: { required : false } },
{ name : "Created", width:100, index : "modify_dt", sortable : true, search : true },
{ name : "Modified", width:100, index : "create_dt", sortable : true, search : true },
{ name : "Active", width:20, index : "active", sortable : true, search : true, editable : true, edittype : "select", editoptions:{value:"0:No;1:Yes"} }
],
onSelectRow: function(id) {
jQuery('#translationsList').editRow(id, true);
},
subGrid: true,
subGridUrl: 'ajax/translations_subgrid_feed.php',
subgridtype: 'xml',
subGridModel : [{
name : ['Translations', 'Language', 'Active'],
width : [583, 70, 80],
align : ['left','right','right'],
params : ['phrase_id']
}],
subGridOptions: {
plusicon : "ui-icon-plus",
minusicon : "ui-icon-minus",
openicon: "ui-icon-carat-1-sw",
expandOnLoad: true,
selectOnExpand : false,
reloadOnExpand : true
}
});
主要/子网格的XML响应可以在this Gist
中找到答案 0 :(得分:1)
我可以重现问题并分析jqGrid的子网格模块的代码。我的解释是:您使用的subGridOptions的新expandOnLoad: true
属性只有在主网格上的“本地”数据类型时才能工作。我没有在文档中找到相应的相关注释,但事实确实如此。
在版本4.1中使用delayOnLoad
选项,但它无法正常工作。在版本4.1.1中,the fix之后未使用该选项,并且在主网格中添加行之后立即使用该选项。问题是jqGrid使用.grid.hDiv.loading
属性来跳过ajax请求,如果先前的ajax请求的响应没有被处理到结束。主网格beforeSend
请求的$.ajax
处理程序内部(请参阅here)将被称为beginReq(),第一行是
ts.grid.hDiv.loading = true;
然后在$.ajax
请求的success处理程序内部将调用addXmlData方法,该方法为主网格的每一行调用addSubGrid,调用{{ 3}}在网格行的“展开”图标上。因此,.grid.hDiv.loading
将在所有网格行上被称为,然后false
将在success
内ts.grid.hDiv.loading
结束$.ajax
处理程序。因此,在.trigger('click');方法的相应部分中,expandOnLoad: true
将进行测试,相应的{{1}}调用将被跳过,行将不会扩展强>
所以我可以重复我的分析的简短结果:不要使用{{1}}选项。它不适用于远程数据。