处理 jqGrid ajax 调用的正确方法

Correct way to handle jqGrid ajax call

不只是 "hard-coding" jqGrid 定义中的 url,我希望有自己的函数来执行 AJAX 调用。

我尝试了几个选项,但 none 真正模拟了直接应用 url 时的场景。

基本上我需要的是保留 jqGrid 的所有默认行为,但作为我负责执行 ajax 调用服务器的人。

var loadData = function () {
    var formData = $('#formFilters').serializeArray();

    getData(formData)
        .then(function (data) {
            $grid
                .setGridParam({ "datatype": "jsonstring", "datastr": data })
                .trigger("reloadGrid");

            resizeGrid();
    })
};

并且网格被插入如下:

$grid.jqGrid({
    datatype: loadData,
    colModel: [...]

这里的主要问题是排序不会触发 ajax 调用,恐怕我需要再修改一下。

是否有关于如何实现网格和数据服务功能之间的这种解耦的最佳实践?

谢谢, 亚历克斯

你可以挂钩这个事件:

jqGridSortCol

记录在此处:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:events

您可以先尝试像这样获取当前过滤器对象:

var f = 'gridselector'
var flts = $( '#' + f ).jqGrid('getGridParam', 'postData').filters

你可以改变那个对象,然后在钩子事件上尝试这样的事情:

$( '#' + f ).jqGrid( 'setGridParam', { search: true, postData: flts } ); 
$( '#' + f ).jqGrid().trigger('reloadGrid');

ps..也许你可以做一些 jsfiddle 来解决你的问题,这样我们就可以更深入地了解 :)