在jQuery中,有一个选项可以将AJAX调用设置为同步:
async: false
Run Code Online (Sandbox Code Playgroud)
有没有办法在jqGrid插件中实现这一点?
退后一步,我试图解决的实际问题(并且可能有更好的方法)是在3级嵌套网格结构上方添加"全部展开"按钮.我最初的方法就是:
$('#buttonExpandAll').click(function() {
// Get all the rows in the top grid
var rows = $('#mainGrid').getRowData();
for (var i = 0; i < rows.length; i++) {
// Expand the sub-grid for this row
$('#mainGrid').expandSubGridRow(rows[i].Id);
// Get all the rows for the sub-grid
// NOTE: This isn't working because it the data hasn't asynchronously loaded yet
var subrows = $('#mainGrid_' + rows[i].Id + '_t').getRowData();
for (var j = 0; j < subrows.length; j++) {
// Expand the sub-sub-grid for this sub-row
$('#mainGrid_' + rows[i].Id + '_t').expandSubGridRow(subrows[j].Id);
}
}
});
Run Code Online (Sandbox Code Playgroud)
可以想象,它扩展了第一级嵌套表就好了.但是,在这些嵌套表从各自的AJAX调用中获取数据之前,循环已经终止.因此内部循环在调用时没有记录.
是否有一种干净的方法来在jqGrid中的嵌套表结构上"展开全部"?我意识到让所有调用同步是一个性能问题,但至少现在这可能不是问题,或者至少可能是两个邪恶中的较小者.
jqGrid代码中有许多ajax调用.几乎每个调用都有相应的ajax操作,可以用来覆盖任何ajax参数.我想在表单中有ajaxSubgridOptions jqGrid选项
ajaxSubgridOptions: { async: false }
Run Code Online (Sandbox Code Playgroud)
会解决你的问题.如果它没有用,你可以覆盖所有ajax调用的设置:
$.extend($.jgrid.ajaxOptions, { async: false });
Run Code Online (Sandbox Code Playgroud)