我最近遇到了一个问题,即批量导入数据并设置现有行的值花费的时间太长。通常的症状是浏览器挂起和"无响应的脚本"警报。
这是代码
function import() {
var dataSource = $("#" + gridId).data("kendoGrid").dataSource;
var data = dataSource.data;
var importedData = null; // from somewhere.....
for(var i = 0; i < data.length; i++) {
data[i].set("column-name-0", importedData[i][0]);
data[i].set("column-name-1", importedData[i][1]);
}
}
我如何解决这个缓慢的问题?
答案 0 :(得分:0)
&#34; set&#34;上面提到的方法实际上是&#34; ObservableObject&#34;的方法,它实际上意味着每次调用一个集合时,它反过来触发网格的刷新。想象一下,在上面的示例中为每个单元格修改刷新网格。
解决方案是不使用set方法,而是直接在模型对象上设置新值,然后触发网格刷新。见下文。
function import() {
var grid = $("#" + gridId);
var dataSource = grid.data("kendoGrid").dataSource;
var data = dataSource.data;
var importedData = null; // from somewhere.....
for(var i = 0; i < data.length; i++) {
data[i]["column-name-0"] = importedData[i][0]); // the value should be in correct datatype of the column
data[i]["column-name-1"] = importedData[i][1]);
}
grid.refresh();
}
请注意,我不需要使用&#39;格式&#39;列或模板&#39;如果已设置,则为列。网格刷新会自动处理。
但是,请确保导入数据的数据类型与列的数据类型匹配。如果没有,您应用的格式化程序将无法工作。
希望这有帮助。