KendoUI寻呼机 - 寻呼机为每个先前的数据源调用Web服务

时间:2014-03-05 14:47:30

标签: jquery json kendo-ui

我有一个Kendo UI列表视图,它与Kendo寻呼机结合使用,以显示从服务器返回的分页数据。这一切都完全正常,没有任何问题,分页和排序都在服务器端完成,没有问题。

我还在页面上有一个用于选择当前类别的树视图 - 当树中的选定节点发生更改时,listview和pager将使用新的数据源进行更新。到目前为止,非常好。

当我在此之后尝试移动到另一个页面时,会出现问题,寻呼机/列表视图会向服务器发送每个先前数据源的请求。

例如,假设我将数据源设置为类别14,然后设置为类别15,我在服务器上获得了带有相关页码的14和15请求。一直无法在网上找到任何关于这个的信息,所以它可能只是我做错了什么,但我也能够将样本分离成几乎只是确切的问题而且我得到了同样的行为。

的ListView /传呼机

function bindGrid(categoryId) {
    var sourceURL = 'api/items/' + categoryId;

    dataSource = new kendo.data.DataSource({
        type: "odata",
            transport: {
             read: {
                 url: sourceURL,
                 dataType: "json"
             }
         },
         scrollable: {
             virtual: true
         },
         serverSorting: true,
         serverPaging: true,
         serverFiltering: true,
         pageSize: 8,
         schema: {
             data: function (data) { return data.Items; },
             total: function (data) { return data.Count; },
         },
     });
     $("#pager").kendoPager({
         dataSource: dataSource
     });
     $("#listView").kendoListView({
         dataSource: dataSource,
         template: kendo.template($("#template").html()),
     });
 }

的TreeView:

$("#treeView").kendoTreeView({
    dataSource: categories,
    dataTextField: "Name",
    dataValueField: "CategoryId",
    select: function (e) {
        var currentCatId = this.dataItem(e.node).CategoryId;
        bindGrid(currentCatId);
    }
});

1 个答案:

答案 0 :(得分:1)

每当你做的事情如下:

 $("#pager").kendoPager({
     dataSource: dataSource
 });
 $("#listView").kendoListView({
     dataSource: dataSource,
     template: kendo.template($("#template").html()),
 });

您正在创建一个新的KendoUI小部件,这意味着如果多次调用bindGrid,您将最终得到多个小部件,然后DataSource绑定到同一个HTML元素。

尝试销毁以前的内容,或者只是 - 更有效地触发新数据的读取。