【问题标题】:Store related row data?存储相关的行数据?
【发布时间】:2016-01-01 04:06:43
【问题描述】:

我正在寻找存储每行数据的最佳方式。我找到了一种使用隐藏列的工作方式(在 colModel 中隐藏:true),但该选项仍会为隐藏单元格创建 DOM 节点,这对我来说似乎是一种浪费。有没有更好的办法?

【问题讨论】:

    标签: jquery jqgrid row


    【解决方案1】:

    首先应该指定如何使用jqGrid。如果使用datatype: "local",则无需创建任何隐藏列。而不是输入数据可以包含像

    这样的项目
    { id: 123, name: "item name", price: 45.67,
        orders: [
            { total: 1543.54, data: "2015-10-02" }
            { total: 1633.71, data: "2015-10-01" }
        ] }
    

    并且orders 数组将作为每个项目的一部分保存在data 数组中。换句话说,您可以保存任何数量的任何类型的附加属性,这些属性将保存在本地数据中。可以使用getLocalRow 方法获取所有数据。例如,可以使用 $("#grid").jqGrid("getLocalRow", "123") 之类的东西来获取与 id="123" 的行关联的数据。

    如果使用datatype: "json" 并从服务器加载数据,则可以使用另一种选项。免费 jqGrid 4.9 及更高版本支持additionalProperties 参数。因此,您可以使用additionalProperties: ["prop1", "prop2"],而不是创建存在于输入数据中的隐藏列prop1prop2。它通知 jqGrid 从输入中读取数据。可以对additionalProperties 项使用更复杂的 for 来读取更复杂的数据并将 关联到行。使用additionalProperties 的主要优点:可以在自定义格式化程序中访问指定的属性,如果使用loadonce: true,属性将保存在本地。

    如果有人使用 TreeGrid,则可以看到许多隐藏列(levelparentisLeafexpandedloadedicon),这些列还保存在本地数据中。由于 jqGrid 的许多版本,内部未使用隐藏列。从 4.9 版开始,免费 jqGrid 不会创建不需要的列并使页面的 DOM 更短。免费jqGrid在本例中使用additionalProperties(见the wiki article)。

    如果当前无法迁移到免费 jqGrid,则可以使用另一种解决方法。可以使用userdata 来保存与网格相关的附加信息。可以在服务器响应中直接包含userdata 以及所有必需的信息,也可以使用beforeProcessing 回调来解析输入数据并填充额外的userdata输入数据将被解析之前jq网格。我建议阅读the old answer 以获取相应的代码示例。主要思想是将userdata 构建为rowid 的映射。地图的项目应包含附加属性:

    userdata: {
        /* properties of userdata could be the rowids */
        123: {
            /* the data could contains the object with additional properties */
            orders: [
                { total: 1543.54, data: "2015-10-02" }
                { total: 1633.71, data: "2015-10-01" }
            ]
        }
    }
    

    它允许使用

    var addProp = $(this).jqGrid("getGridParam", "userData");
    

    并使用addProp[rowid].orders 访问其他属性。

    【讨论】:

    • 感谢您的详细解答。我使用 json 数据类型从服务器加载数据。我找不到任何关于“additionalProperties”选项的文档。无论如何,我现在使用 jqgrid 4.6.0。所以 userdata 选项对我来说似乎是最好的。谢谢!
    • @user3599803:不客气! additionalProperties 选项从免费 jqGrid 4.9 版开始存在。我在the wiki article 上包含了参考,并在我的回答中描述了该选项。如果你使用旧版本的 jqGrid (4.6.0) 那么它没有这样的选项,你必须使用 userData 例如。
    • 我在这里的文档中搜索并没有找到 - trirand.com/jqgridwiki/doku.php?id=wiki:jqgriddocs
    • @user3599803:我写信告诉你additionalProperties 选项存在于jqGrid 的free jqGrid 分支中,而在trirand.com/jqgridwiki/doku.php?id=wiki:jqgriddocs 中描述的4.6.0 版本中不存在。
    • hmm,实际上我没有注意到许可证的变化,我以前知道 jqGrid(trirand 站点)是 MIT 许可的。我想我现在应该切换到这个免费的 jqGrid。 jqGrid 以前的所有功能在免费版上是否仍然有效?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 2013-07-11
    • 1970-01-01
    相关资源
    最近更新 更多