【问题标题】:callback to set postdata without having to reload grid?回调设置postdata而不必重新加载网格?
【发布时间】:2016-08-11 07:47:06
【问题描述】:

(免费)jqGrid 是否提供回调函数,我可以在加载网格之前设置postData

在我的情况下,它是伪 postData,因为我使用带有 loadOnce : true 的 jqGrid。 我正在使用postData 将过滤器应用于网格。我通过 ajax 调用加载这些数据。

我想一次从服务器加载所有网格数据 - 然后在本地应用过滤器。因此,当用户更改这些过滤器(例如通过使用工具栏搜索/过滤)时,它只会应用于本地数据。

我已经试过了:

beforeInitGrid : function()
{
    $("#grid").jqGrid('setGridParam', {
        search:     true,
        postData : {"toolbar":[{"name":"customer","value":"difranco"}],"postdata":{"_search":"true","nd":"1461054190117","rows":"30","page":"1","sidx":"my_date","sord":"asc","totalrows":"10000","filters":"{\"groupOp\":\"AND\",\"rules\":[{\"field\":\"customer\",\"op\":\"cn\",\"data\":\"difranco\"}]}"},"sortname":"my_date","sortorder":"asc","page":"1","rowNum":"30"}
    });
}

还有回调函数:gridComplete, loadComplete; 我尝试将postData 参数直接设置为jqGrid。

但没有使用.trigger("reloadGrid") 重新加载也没有工作。

感谢您的帮助!

【问题讨论】:

  • 我不确定我是否正确理解了这个问题。您的服务器 interpret filters 参数是否存在问题,它返回 已过滤 数据而不是返回完整的未过滤数据?如果没有,那么您可以在创建网格时直接设置 postData.filters 并使用loadonce: true, forceClientSorting: true。免费的jqGrid会过滤返回的数据,在那里排序并显示最终结果的第一页。不需要reloadGrid
  • @Oleg 不,我的服务器脚本不解释过滤器。我想我只是不知道如何在创建期间设置postData。我不知道forceClientSorting

标签: javascript jquery ajax jqgrid free-jqgrid


【解决方案1】:

在我看来,您可以在创建网格时使用参数

loadonce: true,
forceClientSorting: true,
search: true,
postData: {
   filters: {
       groupOp: "AND",
       rules: [
           {field: "customer", op: "cn", data: "difranco"}
       ]
   }
}

gridCompleteloadComplete.trigger("reloadGrid") 无需任何技巧。请参阅the demothis one,我将它们包含在the readme 中以释放jqGrid 4.13.1。演示使用本地数据,但同样适用于远程数据。查看更复杂的演示 herehere,它们主要展示了另一个强大的功能:additionalProperties 和使用 sortfunc 的自定义排序,但它使用 loadonce: true, forceClientSorting: truepostData.filterssearch: true

服务器应该忽略发送 jqGrid 给它的所有参数并返回所有数据,这一点很重要。免费的jqGrid会根据postData.filters过滤从服务器返回的数据,对结果进行排序,并将最终结果的第一页显示给用户。用户可以使用本地分页,可以修改过滤器等。对服务器没有其他要求。

【讨论】:

  • 谢谢你,奥列格!好吧,这适用于“简单”部分 - 如果我只使用 filters 你的代码对我有用。但如果我想显示不同的页面,例如,它不起作用。我在哪里放置这些其他信息?我至少需要显示不同页面的选项。
  • @low_rents:“显示不同的页面”是什么意思?
  • 我正在尝试将 free-jqgrid 的整个“状态”保存在一个对象中。这还包括您当前所在的页数。正如您在我的示例中看到的那样,当我使用 $("#grid").jqGrid('setGridParam', { search: true, postData : .... }).trigger("reloadGrid"); 时,一切正常
  • @low_rents:我认为你永远不应该使用setGridParam。您应该首先定义“状态”并指定 where 保存它(在 localStorage 中,回到服务器上等等)。例如,如果您创建网格,您可以使用page: 2,它将显示第二页。您可以将其与从服务器加载数据结合使用。为the answer 创建的the demo 显示在localStorage 中保存某种“状态”。您可以选择第 2 页并重新加载该页面。
  • jqGrid('getGridParam', paramString) 的工作方式有点令人困惑。例如,我如何获取保存在filters 中的数据? postData.filters 或类似的不起作用。
猜你喜欢
  • 2010-11-30
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
相关资源
最近更新 更多