【问题标题】:jqGrid Refresh From Server IssuejqGrid 从服务器刷新问题
【发布时间】:2015-06-19 14:18:20
【问题描述】:

我有一个加载良好的 Struts2 jqGrid 页面。单击导航器刷新按钮时,我希望它从服务器重新加载网格。

    <sjg:grid
        altRows="false"
        id="gridtable"
        dataType="json"
        editurl="%{editurl}"
        filter="true"
        filterOptions="{stringResult:true}"
        gridModel="gridModel"
        gridview="true"
        height="600"
        href="%{remoteurl}"         
        loadonce="true"
        navigator="true"
        navigatorAdd="%{editPermission}"
        navigatorAddOptions="{
            closeAfterAdd:false,
            closeOnEscape:true,
            reloadAfterSubmit:true,
            addCaption:'Add Record'}" 
        navigatorDelete="false"
        navigatorEdit="%{editPermission}"
        navigatorEditOptions="{
            closeAfterEdit:false,
            closeOnEscape:true,
            afterSubmit:function(response, postdata) {
                        return isError(response.responseText);
                     }
        }"
        navigatorRefresh="true"
        navigatorSearch="false"
        onCompleteTopics="loadComplete"
        onSelectRowTopics="rowselect"
        onEditInlineBeforeTopics="beforeFormLoad"
        pager="true"
        pagerButtons="true"
        rowList="25,50,100"
        rowNum="25"
        rownumbers="true"
    >

单击刷新按钮时,我有以下绑定将数据类型设置为 json。

$("#refresh_gridtable").bind("click", function(){
    $("#gridtable").jqGrid("setGridParam", {datatype: 'json'});
    return [true];
});

但是,当我单击刷新按钮时,它只会在每次单击时从服务器重新加载数据。如果我在特定列上执行客户端排序然后单击刷新它不会从服务器重新加载第一次单击,第二次单击将在没有排序的情况下从服务器刷新(排序图标此时在顶部仍然可见列),那么第三次点击不会命中服务器,但会应用排序。

如何每次都从服务器重新加载刷新,然后应用任何现有的排序/过滤字段?

【问题讨论】:

    标签: jquery jqgrid struts2-jquery-grid struts2-jquery-plugin


    【解决方案1】:

    解决方案在一定程度上取决于您使用的底层 jqGrid。如果您使用free jqGrid 4.9,那么您可以使用navGrid 的附加选项:reloadGridOptions: { fromServer: true }

    如果您使用旧版本的 jqGrid,那么您可以在重新加载之前直接使用回调 beforeRefreshdatatype 重置为 "json"。我自己不使用 Struts2。所以不知道在哪里可以指定回调beforeRefresh

    或者,您可以使用navigatorRefresh="false" 从导航栏中删除标准刷新按钮并使用navigatorExtraButtons,它似乎可以替代navButtonAdd。如果我正确理解该选项,您可以指定onclick 的免费代码,它可以满足您的所有需求。您可以使用icon: "ui-icon-refresh" 使自定义按钮看起来与标准的刷新按钮完全相同。在onclick 内部可以设置datatype: 'json' 并触发"reloadGrid"

    【讨论】:

    • Struts2 插件使用 jqGrid 4.6.0,所以我不能使用那个新选项。但是您对旧版本的建议非常有效。再次感谢。有没有办法在调用 .trigger("reloadGrid") 后应用现有的本地过滤器/排序?
    • @user3420328:我不确定你如何在 Struts2 中做到这一点,但你通常需要做的是保存postData.filters 在重新加载之前,设置@987654338 @,触发reloadGrid,然后你需要包含loadComplete和小代码var $self = $(this), p = $self.jqGrid("getGridParam"); if (p.datatype === "json") { setTimeout(function () { p.postData.filters = previouslySavedFilter; p.search = true; $self.trigger("reloadGrid"); }, 50);} setTimeout中的代码将在之后 jqGrid已经将datatype更改为"local"并重新加载过滤器是本地的。
    • 我似乎无法让这段代码工作。我不熟悉javascript,所以我不知道如何保存postData.Filters?你能给我一个这个过程的例子吗?
    • @user3420328:抱歉,我没有完全符合您需要的示例。 “保存”只不过是将值分配给变量:previouslySavedFilter = p.postData.filters;。如果您对网格参数的使用没有问题,那么您可以p.previouslySavedFilter = p.postData.filters;。我的意思是previouslySavedFilter 是您保存数据并稍后恢复可以只是jqGrid 的新参数。如果您在实施中遇到问题,您应该打开新问题并发布您当前的代码,它的工作方式与预期不同,我会帮助您解决它。
    • 谢谢,我创建了以下关于保存过滤器 postData 的问题。 stackoverflow.com/questions/30984263/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多