如何在首次加载附加到远程dataSource的Kendo UI Grid上手动设置页面和总结果(autoBind:false)?

时间:2014-03-24 23:28:44

标签: jquery kendo-ui kendo-grid

类似的问题发布在论坛 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, 
                },{
...

3 个答案:

答案 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元素的名称。