在jQuery中,有一个选项可以将AJAX调用设置为同步:
async: false
有没有办法在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);
}
}
});
可以想象,它可以很好地扩展嵌套表的第一级。但是,在这些嵌套表从各自的AJAX调用中获取数据之前,循环已经终止。所以内部循环在被调用时没有记录。
在jqGrid中嵌套表结构上有“全部展开”的干净方法吗?我意识到让所有调用同步是一个性能问题,但至少现在这可能不是问题,或者至少可能是两个邪恶中的较小者。
答案 0 :(得分:5)
jqGrid代码中有很多ajax调用。几乎每个调用都有相应的ajax操作,可以用来覆盖任何ajax参数。我想表格中的ajaxSubgridOptions jqGrid选项
ajaxSubgridOptions: { async: false }
将解决您的问题。如果它没有用,你可以覆盖所有ajax调用的设置:
$.extend($.jgrid.ajaxOptions, { async: false });