jquery - 是否应该将 jqGrid 的 addJSONData 的用法替换为 setGridParam() 的用法,并触发 ('reloadGrid' )?

标签 jquery jqgrid

我最近写了一个回答“jqGrid display default “loading” message when updating a table / on custom update”的问题。在写答案时,我想:为什么他使用 addJSONData() 函数刷新网格中的数据,而不是更改关于 setGridParam() 的 URL 并刷新关于 trigger('reloadGrid') 的 jqGrid 数据?一开始我想推荐使用“reloadGrid”,但在考虑之后我明白我不太确定最好的方法是什么。至少,我无法用两句话解释为什么我更喜欢第二种方式。所以我决定这可能是一个有趣的讨论主题。

所以确切地说:我们有一个典型的情况。我们有一个网页,其中至少有一个 jqGrid 和一些其他控件,如组合框(选择)、复选框等,这些控件使用户可以更改 jqGrid 中显示的信息范围。通常我们定义一些事件处理程序,如 jQuery("#selector").change(myRefresh).keyup(myKeyRefresh)我们需要根据用户的选择重新加载 jqGrid 容器。

在读取和分析来自其他用户输入的信息后,我们至少可以通过两种方式刷新 jqGrid 容器:

  • 拨打 $.ajax()手动然后里面的成功或完整句柄 $.ajax调用 jQuery.parseJSON() (或 eval )然后调用 jqGrid 的 addJSONData 函数。我在 stackoverflow.com 上找到了很多使用 addJSONData 的例子。
  • 更新 网址 jqGrid 根据用户输入,重置当前 number 为 1 并可选择更改 标题的网格。所有这些都可以通过 setGridParam() 和可选的 setCaption() jqGrid 方法来完成。最后调用网格的 trigger('reloadGrid') 函数。构建 网址 ,顺便说一下,我主要使用 jQuery.param 函数来确保,我已经正确打包了关于 encodeURIComponent 的所有 url 参数。

  • 我希望我们讨论两种方式的优缺点。我目前使用第二种方式,所以我将从这种方式的优点开始。

    可以说:我调用现有的Web Service,将接收到的数据转换为jqGrid格式并调用addJSONData。这就是我使用 addJSONData 方法的原因!

    好的,我会选择另一种方式。 jqGrid 可以直接调用Web Service 并将结果填充到网格内。有很多 jqGrid 选项,允许您自定义此过程。

    首先,可以删除或重命名发送到服务器的任何关于 的标准参数。 prmNames jqGrid 选项或添加更多关于 的附加参数后数据选项(见 http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options)。可以在 jqGrid 生成相应的 $.ajax 之前立即修改所有构造的参数。通过定义 serializeGridData() 函数(jqGrid 的另一个选项)来请求。不仅如此,每个$.ajax都可以改变。参数通过设置 ajaxGridOptions jqGrid 的选项。我用 ajaxGridOptions: {contentType: "application/json"}例如作为 $.jgrid.defaults 的一般设置.
    ajaxGridOptions 选项非常强大。关于 ajaxGridOptions 选项一可以重新定义 $.ajax 的任何参数请求由 jqGrid 发送,如错误、完成和 beforeSend 事件。我认为定义 dataFilter 事件可能很有趣,以便能够对从服务器返回的行数据进行任何修改。

    使用 trigger('reloadGrid') 方式的另一个论据是在 AJAX 请求处理期间阻塞 jqGrid。大多数情况下,我使用参数 loadui: 'block'在 JSON 请求发送到服务器期间阻止 jqGrid。关于 jQuery blockUI 插件 http://malsup.com/jquery/block/一个可以只将网页的更多部分作为网格来阻止。要做到这一点,可以调用:
    jQuery('#main').block({ message: '<h1>Die Daten werden vom Server geladen...</h1>' });
    

    在调用 loadComplete 和 loadError 函数中的 trigger('reloadGrid') 方法和 jQuery('#main').unblock() 之前。 loadui 在这种情况下,可以将选项设置为“禁用”。

    我的最后一句话:主要是我用 创建 jqGrid数据类型 设置为 'local' 而不是 'json',我会调用一些控件(组合框之一)的 trigger('change') 函数,例如:jQuery("#selector").change(myRefresh).keyup(myKeyRefresh).trigger('change') .
    因此我构造了 网址 jqGrid 的参数仅在更改句柄内部的一处更改 数据类型 到上述 setGridParam() 中的“json”。

    所以我不明白为什么应该使用 addJSONData() 函数。

    使用 addJSONData() 函数的人可以向我解释其使用的优点吗?

    公平地说,我可以添加存在于旧版本 jqGrid 中的 addJSONData() ,因为它具有我在此处描述的大部分功能。是否应该将 jqGrid 的 addJSONData 的用法替换为 setGridParam() 和 trigger('reloadGrid') 的用法?

    最佳答案

    我一直在将 addJSONData 与 jqgrid 一起使用,但那是 1 年前,从那时起 jqGrid 发生了很多变化。

    无论如何,我需要在客户端进行大量复杂的 gui 操作(银行共享的东西),我的 Json 数据仅在本地并作为某个 jkey 点发送到服务器(工作完成)。我有几个 jqgrid(其中一些在其他 jqgrids 中 :-) )和某种本地浏览器数据存储,这些数据小到足以留在浏览器中,并且复杂且移动到足以在合理的时间内通过 ajax IO 无法使用。

    第一个版本使用 Ajax IO,当我遇到锁定和等待问题以及新的复杂 GUI 事物的数量时,我真的很高兴找到这个 addJSONData 钩子(Hook)并在 jQgrid 之外拥有自己的 ajax 时间线。

    关于jquery - 是否应该将 jqGrid 的 addJSONData 的用法替换为 setGridParam() 的用法,并触发 ('reloadGrid' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2660226/

    相关文章:

    javascript - 在保留空间的同时淡化 DIV

    javascript - 单击按钮时强制下载pdf

    jquery - 在jqgrid中使用grid.history来跟踪搜索

    jqgrid:获取单击复选框的行的ID

    jquery - 无论如何,有没有办法让 jqgrid 具有组列标题并且仍然支持排序

    javascript - 将输入类型=数字中的点转换为逗号

    javascript - 悬停效果在 ajax 加载的内容上工作很奇怪

    jqgrid + 带空格的数字排序

    jquery - jqgrid编辑表单默认自动完成="off",如何更改为自动完成="on"

    jqgrid - 将 JSON 数据映射到 jqGrid