jqgrid 覆盖树中的默认 URL

jqgrid overriding the default URL in a Tree

我有一个网格,它有一个带按钮的日期选择器和一个复选框,用于在日期更改时重新加载网格。日期选择器初始化为今天。这很好用。但是我不知道如何覆盖网格中的默认 url 。每当加载作为树的网格时,它都会从 url 配置中读取默认值。只有当我单击按钮时,它才会重新加载选定日期的树。更糟糕的是,当我单击树中的图标以展开子元素时,它会使用默认值 URL 覆盖日期和所有加载的数据。有人能告诉我如何正确设置 url 吗?我也不明白为什么单击元素会重新加载树,因为我有 属性 loadonce=true.

谢谢

    $(document).ready(function(){
    $("#list").jqGrid({
            url : "/reconcile?unMatchedOnly=true",
            datatype : "json",
            mtype : 'GET',
            colModel : [
            {name : "data.key.busnDate", label : "Business Date", hidden:false, sorttype:"date", width : 100 },
            {name : "data.product", label : "Product", sorttype:"string", width : 50, editable : false},
            {name : "data.quantityBought", label : "Quantity Bought", sorttype:"int", width : 100, editable : false},
            {name : "matches", label : "match", "edittype":"checkbox","formatter":"checkbox", width : 25, editable : false}
            ],
            cmTemplate: { width: 70 },
            treeGrid: true,
            pager : '#pager',
            treeGridModel: "adjacency",
            ExpandColumn: "data.key.busnDate",
            rowNum : 25,
            height: 'auto',
            rowList : [ 25,50,100,200 ],
            loadonce:true,
    });
    jQuery("#list").jqGrid('navGrid', '#pager', {
            edit : false,
            add : false,
            del : false,
            view : true,
            search : true
    });
      $('#datePick').datepicker({
        onSelect: function (dateText, inst) {
            var e = $("#list").data("events");
            if (typeof (e) !== "undefined" && typeof (e.reloadGrid) !== "undefined") {
                $("#list").trigger("reloadGrid");
            }
        }
    }
    );
    $("#datePick").datepicker('setDate', new Date());
    jQuery("#list").setGridParam({url:'/reconcile?datePick=' + $("#datePick").val() + '&unMatchedOnly=' + $("#unMatchedOnly").val(),page:1});
    var url = '/reconcile?datePick=' + $("#datePick").val() + '&unMatchedOnly=' + $("#unMatchedOnly").val();
    $("#list").jqGrid('setGridParam', { url: url });

});

$('#showSelected').on('click', function () {
    var url = '/reconcile?datePick=' + $("#datePick").val() + '&unMatchedOnly=' + $("#unMatchedOnly").val();
    $("#list").jqGrid('setGridParam', { url: url });
    $("#list").trigger("reloadGrid");
});

我无法重现您报告的问题。如果你想一次加载 TreeGrid 的数据那么你不需要使用 loadonce: true 选项。相反,数据项应该包含 属性 "loaded":true.

如果您需要向服务器发送一些额外的参数,那么您应该使用 postData 参数并将属性定义为函数(请参阅 the old answer)。你可以只使用

url: "/reconcile",
postData: {
    datePick: function () { return $("#datePick").val(); },
    unMatchedOnly: function () { return $("#unMatchedOnly").val(); }
}

作为结果 来自 #datePick#unMatchedOnly 的当前数据 将在每次加载网格时发送到服务器。要重新加载 TreeGrid,您只需使用 $("#list").trigger("reloadGrid");.

如果确实按需加载网格数据,则扩展节点会将 nodeidn_levelparentid 参数添加到 postDatatreeANode参数由-1改为展开节点的rowid。要在重新加载之前重置参数 ,您需要将 treeANode 参数重置为 -1

我不知道数据的格式,returns url: "/reconcile",但我想你可以使用下面的代码

$(document).ready(function(){
    var $grid = $("#list"),
        fullReloadOfTreeGrid = function () {
            var p = $grid.jqGrid("getGridParam"); // get reference to parameters
            p.treeANode = -1; // be sure that we reload full grid
            $grid.trigger("reloadGrid");
        };

    $('#datePick').datepicker({
        onSelect: function (dateText, inst) {
            fullReloadOfTreeGrid();
        }
    });
    $("#datePick").datepicker('setDate', new Date());

    $grid.jqGrid({
        url: "/reconcile?unMatchedOnly=true",
        datatype: "json",
        postData: {
            datePick: function () { return $("#datePick").val(); },
            unMatchedOnly: function () { return $("#unMatchedOnly").val(); }
        },
        colModel: [
            {name: "data.key.busnDate", label: "Business Date",
              sorttype:"date", width : 100 },
            {name: "data.product", label: "Product", width: 50},
            {name: "data.quantityBought", label: "Quantity Bought",
              sorttype:"int", width: 100},
            {name: "matches", label: "match",
             "template: "booleanCheckbox", width : 25}
        ],
        cmTemplate: { width: 70 },
        treeGrid: true,
        pager: true,
        treeGridModel: "adjacency",
        ExpandColumn: "data.key.busnDate"
    }).jqGrid('navGrid', {
        edit : false,
        add : false,
        del : false,
        view : true
    });

    $('#showSelected').on('click', function () {
        fullReloadOfTreeGrid();
    });
});

正如我之前所写,如果您确实一次正确地加载了所有节点(使用loaded:true 属性 在所有节点中)。