我使用Jqgrid显示一些数据,使用DataType作为本地,我不想回发到服务器并返回带有要绑定的数据的jsonString。我将Json String传递给客户端并使用addRowData逐个添加数据。由于每个单元格中的信息,如果数据的数量很大,那么用户似乎需要花费一些时间。
for (var i = 0; i < gridData.length; i++)
jQuery("#jqgInventory").jqGrid('addRowData', i + 1, JSON.parse(gridData[i]));
是否有任何替代方法将数据绑定到jqgrid,例如,只需将JsonString作为数据源提供,它将更快地绑定它或任何其他建议。
注意:使用DataType作为Json并设置postUrl将比上述方法更快。
请任何帮助! 提前致谢, 阿拉
答案 0 :(得分:3)
这句话直接来自jqGrid文档:“一个存储传递给网格的本地数据的数组。你可以直接指向这个变量,以防你想加载一个数组数据。它可以取代慢的addRowData方法关于相对大数据“。这正是你所说的。
请在此处查看:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options
以下是您的工作示例:http://jsfiddle.net/yNw3C/649/
你只需要输入选项:
data: my_data
my_data
是信息数组。
答案 1 :(得分:0)
我同意Jeffery_The_Wind的另一个答案。他没有只写出他推荐的选项名称: data
参数。重要的是要添加一个应使用gridview: true
选项并且不要使用afterInsertRow回调。
理解:使用addRowData
是填充网格最缓慢且无效的方法。最大的问题是,如果您在页面上插入元素或更改元素,则至少必须通过Web浏览器重新计算所有现有元素的位置。您放置在页面上的元素越多,插入下一个元素的速度就越慢。
从两种方式解决问题主要在一个方面:
DocumentFragment
来准备DOM元素的分离层次结构,然后将片段放在页面上的一个操作中。innerHTML
属性将多个元素放在页面上的一个操作中。 jqGrid使用第二种方法。使用gridview: true
来获取行为非常重要。因此,填充本地网格的推荐方法是:
datatype: 'local'
和data
参数与数据的使用。输入data
参数值的标准格式是包含行项的数组。每个项目都具有相同的属性,例如name
colModel
属性的值。此外,每个项目都应具有id
属性,该属性定义“rowid” - 网格的<tr>
元素(行)的id。如果您有其他格式的输入数据,则必须使用相应的localReader参数来描述数据的格式。datatype: 'jsonstring'
和datastr
参数的用法。 datastr
参数的值可以是具有相同内容的JSON字符串或JavaScript对象。因此,如果您将数据作为对象,则无需使用JSON.stringify
将其转换为JSON字符串。您还可以使用与datatype: 'json'
所知的格式相同的格式jsonReader。从data
参数(在datatype: 'local'
}和datastr
参数的情况下(在datatype: 'jsonstring'
的情况下)插入数据的主要区别在于输入数据将是如果使用data
参数,则按jqGrid排序,并且在datastr
参数的情况下将包含未排序。