使用jqGrid进行同步调用?

时间:2011-06-08 14:39:45

标签: jqgrid

在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中嵌套表结构上有“全部展开”的干净方法吗?我意识到让所有调用同步是一个性能问题,但至少现在这可能不是问题,或者至少可能是两个邪恶中的较小者。

1 个答案:

答案 0 :(得分:5)

jqGrid代码中有很多ajax调用。几乎每个调用都有相应的ajax操作,可以用来覆盖任何ajax参数。我想表格中的ajaxSubgridOptions jqGrid选项

ajaxSubgridOptions: { async: false }

将解决您的问题。如果它没有用,你可以覆盖所有ajax调用的设置:

$.extend($.jgrid.ajaxOptions, { async: false });