Kendo ui 添加新行后滚动虚拟化网格时,web浏览器崩溃

Kendo ui 添加新行后滚动虚拟化网格时,web浏览器崩溃,kendo-ui,kendo-grid,Kendo Ui,Kendo Grid,我正在使用KendoUIV.2013.1.514,但是在使用grid小部件时遇到了一个非常可怕的错误 如您所见,我将虚拟滚动选项设置为“true”,页面大小为25。使用addRow函数向网格添加新行后,每次向下滚动网格时,web浏览器都会崩溃。这真的很糟糕,因为我需要虚拟化,还需要向网格中添加一些新记录。我在下面粘贴了一些测试代码,希望能对大家有所帮助 顺便说一句,我在您的本地演示“virtualizationlocaldata.html”上进行了测试。似乎代码只是在DataSource小部件的

我正在使用KendoUIV.2013.1.514,但是在使用grid小部件时遇到了一个非常可怕的错误

如您所见,我将虚拟滚动选项设置为“true”,页面大小为25。使用addRow函数向网格添加新行后,每次向下滚动网格时,web浏览器都会崩溃。这真的很糟糕,因为我需要虚拟化,还需要向网格中添加一些新记录。我在下面粘贴了一些测试代码,希望能对大家有所帮助

顺便说一句,我在您的本地演示“virtualizationlocaldata.html”上进行了测试。似乎代码只是在DataSource小部件的“range”函数中运行循环

<script>
$(function() {
    var arrayDataSource = [];
    for (var i = 0; i < 1000; i++) {
        arrayDataSource.push({ 
            check: true, 
            ip: "10.1.201.3"
        });
    }

    $('#grid').kendoGrid({
        height: 600,
        dataSource: {
            data: arrayDataSource,
            schema: {
                model: {
                    fields: {
                        check: { type: 'boolean' },
                        ip: { type: 'string' }
                    }
                }
            },
            pageSize: 25
        },
        columns: ['check', 'ip'],
        editable: false,
        scrollable: {
            virtual: true
        }
    });

    $('#add').click(function() {
        $('#grid').data('kendoGrid').addRow();
    });
});
</script>
</head>
<body>
    <div id="grid"></div>
    <button id="add">add</button>
</body>
</html>

$(函数(){
var arrayDataSource=[];
对于(变量i=0;i<1000;i++){
arrayDataSource.push({
检查:正确,
ip:“10.1.201.3”
});
}
$(“#网格”).kendoGrid({
身高:600,
数据源:{
数据:arrayDataSource,
模式:{
型号:{
字段:{
检查:{type:'boolean'},
ip:{type:'string'}
}
}
},
页面大小:25
},
列:[“检查”、“ip”],
可编辑:false,
可滚动:{
虚拟的:真的
}
});
$('#添加')。单击(函数(){
$(“#网格”).data('kendoGrid').addRow();
});
});
添加

试着在这把小提琴上建立:

编辑:

剑道支援的答复:


不支持在启用虚拟滚动的情况下向网格添加新元素。请记住,您可以随时在我们的反馈论坛中提交,以便在我们未来的发行版中加以考虑。

运行相同的问题时,在internet上没有找到任何解决方法,因此在挖掘剑道资源后,找到了似乎有效的解决方法,但仅在完全刷新数据源的情况下

所以,下一个场景是:

  • 将项添加到数据数组
  • 设置
    grid.dataSource.\u skip=0
  • 刷新
    数据源,如grid.dataSource.data(数据)
  • $(“#grid.k-scrollbar-vertical”)一样刷新滚动条。滚动条(0)
我更新了小提琴:

addRow-不工作
添加顶部
添加底部
var数据=[];
对于(变量i=0;i<100;i++){
数据推送({
支票:i+1,
ip:'10.1.201.3'
});
}
var grid=$(“#grid”).kendoGrid({
身高:300,
数据源:{
数据:数据,
页面大小:10,
模式:{
型号:{
id:“支票”,
知识产权:“知识产权”
}
}
},
栏目:[
{字段:“检查”},
{字段:“ip”}
],
是的,
可滚动:{
虚拟的:真的
}
}).数据(“kendoGrid”);
var scroller=$(“#grid.k-scrollbar-vertical”);
$('#添加')。单击(函数(){
grid.addRow();
});
$(“#添加顶部”)。单击(函数(){
拼接(0,0,{check:0,ip:'1.1.1'});
grid.dataSource.\u skip=0;//修复数据绑定
grid.dataSource.data(数据);
scroller.scrollTop(0);//应该刷新scroll
});
$(“#添加底部”)。单击(函数(){
数据推送({检查:999,ip:'9.9.9'});
grid.dataSource.\u skip=0;//修复数据绑定
grid.dataSource.data(数据);
scroller.scrollTop(scroller.prop(“scrollHeight”);//应该刷新scroll
});

不,鲍比。我知道数据源是一个循环。但我的意思是,在向源数组添加新行之后。DataSource的“range”函数将计算错误的endIndex,因此它只是递归运行以查找准确的数据范围,最终浏览器崩溃。我已更新了我的答案,我没有阅读您使用DataSource变量的方式,抱歉。这在不破坏chrome的情况下对我有效。尝试在网格中添加新行,并向下滚动网格,结果相同…,你可以在chromeSee中的开发工具中检查错误,你只用了2天就说服我:)。我会请求“剑道人”,也就是他们的支持。确实,这是失败的,我假设它不仅在小提琴权利?这个功能是不受支持的。请参阅我的答案中剑道支持的答案。
var grid = $('#grid').kendoGrid({
    height: 300,
    dataSource: {
        data: [
               {check: 1,ip: "10.1.201.3"},
               {check: 2,ip: "10.1.201.3"},
               {check: 3,ip: "10.1.201.3"},
               {check: 4,ip: "10.1.201.3"},
               {check: 5,ip: "10.1.201.3"},
               {check: 6,ip: "10.1.201.3"},
               {check: 7,ip: "10.1.201.3"},
               {check: 8,ip: "10.1.201.3"}
              ],
        schema: {
            model: {
                id: "check",
                ip: "ip"
            }
        }
    },
   columns: [
               { field: "check" },
               { field: "ip" }
              ],
   editable: true,
     scrollable: {
            virtual: true
        }
}).data('kendoGrid');

$('#add').click(function () {
    grid.addRow();
});
<button id="add">addRow - not working</button>
<button id="add-top">add top</button>
<button id="add-bottom">add bottom</button>
<div id="grid"></div>

var data = [];
for(var i = 0; i < 100; i++) {
    data.push({
        check: i + 1,
        ip: '10.1.201.3'
    });
}

var grid = $('#grid').kendoGrid({
    height: 300,
    dataSource: {
        data: data,
        pageSize: 10,
        schema: {
            model: {
                id: "check",
                ip: "ip"
            }
        }
    },
   columns: [
               { field: "check" },
               { field: "ip" }
              ],
   editable: true,
     scrollable: {
            virtual: true
        }
}).data('kendoGrid');

var scroller = $("#grid .k-scrollbar-vertical");

$('#add').click(function () {
    grid.addRow();
});

$('#add-top').click(function () {
    data.splice(0,0,{check: 0, ip: '1.1.1.1'});
    grid.dataSource._skip = 0; // fix databind
    grid.dataSource.data(data);
    scroller.scrollTop(0); // should refresh scroll
});

$('#add-bottom').click(function () {
    data.push({check: 999, ip: '9.9.9.9'});
    grid.dataSource._skip = 0; // fix databind
    grid.dataSource.data(data);
    scroller.scrollTop(scroller.prop("scrollHeight")); // should refresh scroll
});