类似的问题发布在论坛 here 上,但没有回答。
在 fiddle here 中可以看到问题的演示。请注意页面为0,表示"没有要显示的项目"总页数。
对于渐进增强的原因,
我的网格最初是从现有的HTML表加载的。这对SEO很有好处,也是渐进增强的真正优势。但是,我希望我的Kendo Grid使用ajax重新加载它的数据(用于排序,分页等操作)。在初始化时,我将dataSource设置为具有远程读取URL。这很好用,但有一个问题:它在第一次加载时运行不必要的ajax调用。请记住,我已经通过读取现有的HTML表格生成了第一组数据......
为了避免不必要的第一个ajax调用,我在网格初始化中添加了autoBind:false
。但副作用是现在网格错误地表示页面为0
,页面总数显示为no items for display
。
如果您无法在首次加载时以编程方式设置这些元素,那么autoBind
会有什么用处? 有关如何取消第一次ajax调用,并在首次加载时手动设置页码和总页数的任何想法?
$("#grid").kendoGrid({
sortable: true,
pageable: true,
resizable: true,
selectable: "multiple",
autoBind: false,
dataSource: {
transport: {
read: {
type: "GET",
dataType: "json",
url: "some url here",
}
},
pageSize:40,
serverPaging: true,
serverSorting: true,
schema: {
data: "rows",
total: function(data){
return data.total;
}
}
}
columns: [{
field: "id",
title: "ID",
width:3,
},{
field: "name",
title: "Name",
width:13,
},{
...
答案 0 :(得分:1)
total
中定义的schema
函数表示您在返回的JSON中有一个名为total
的字段。真的吗?所以你的JSON应该是这样的:
{
rows : [
{ id: 1, name: "name1" },
{ id: 2, name: "name2" },
{ id: 3, name: "name3" },
{ id: 4, name: "name4" }
],
total : 4
}
这是你的JSON的样子吗?
如果您实际上没有返回名为total
的JSON字段,那么您应该定义为:
total, function (data) {
return data.length;
}
要转到网格中的特定页面,并且由于您使用的是autoBind: false
,您应该使用:
grid.dataSource.query({ page: 3, pageSize: 40 });
检查它在此处运行:http://jsfiddle.net/WNk6d/您会看到网格不最初加载(autoBind
等于false)以及每当您更改numericTextBox
字段时,它会加载您想要的页面(而不是第一个),并且在您更改数字文本框之前不会发生任何事情。
答案 1 :(得分:1)
dataSource.query({ 页:1, 跳过:0, pageSize:5 });
答案 2 :(得分:0)
您需要在页面加载时调用Kendo网格DataSource的read方法。 我使用过Ajax,但它确实有用......
我为此目的写了一个小脚本。
$(function(){
var dataSource = $("#LogLatestGrid").data("kendoGrid").dataSource;
$("#LogPanel").bind("shown", function(){
dataSource.read();
});
});
在你的页面加载时调用它。请更改DOM元素的名称。