存储相关的行数据?

时间:2015-10-04 10:56:47

标签: jquery jqgrid row

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

1 个答案:

答案 0 :(得分: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参数。因此,您可以使用prop1而不是创建输入数据中存在的隐藏列prop2additionalProperties: ["prop1", "prop2"]。它通知jqGrid从输入中读取数据。可以对additionalProperties项使用更复杂的内容来读取更复杂的数据并将其关联到行。使用additionalProperties的主要优点:可以在自定义格式化程序中访问指定的属性,如果使用loadonce: true,属性将保存在本地。

如果有人使用了TreeGrid,那么可以看到许多隐藏的列(levelparentisLeafexpandedloadedicon )另外保存在本地数据中。由于许多版本的jqGrid,内部未使用隐藏列。从版本4.9开始,free jqGrid不会创建不需要的列,并且会缩短页面的DOM。免费jqGrid在案例中使用additionalProperties(请参阅the wiki article)。

在一个当前无法迁移到免费的jqGrid,然后可以使用另一种解决方法。可以使用userdata来保存与网格关联的其他信息。可以直接在服务器响应中包含userdata并提供所有必需信息,也可以使用beforeProcessing回调来解析输入数据,并在之前填充其他userdata 输入数据将由jqGrid解析。我建议您阅读the old answer以获取相应的代码示例。主要思想是将userdata构建为mapid map by mapid。地图的项目应包含其他属性:

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访问其他媒体资源。