10

环境:

  • 剑道版本:2013.1.319
  • 数据源:

    productsDataSource = new kendo.data.DataSource({
        type: "odata",
        transport: {
            read: "http://www.mydomain.com/odata.svc/products",
            dataType: "json",
            contentType: "application/json"
        }
        schema: {
            type: "json",
            data: function(data){
                return data.value;
            },
            total: function(data){
                return data['odata.count'];
            },
            model: product
        },
        pageSize: 50,
        serverPaging: true,
        serverFiltering: true,
        serverSorting: true
    });
    
  • 获取数据:

    productsDataSource.filter([{ field: "Id", operator: "eq", value: 5 }]); //这将发送一个http请求

    productsDataSource.fetch(function (e) { tempDataStorage = e.items; //处理数据的更多逻辑; });

  • 问题:

    1. 需要使用dataSource的fetch方法进行数据处理(widget初始化、数据绑定...等);
    2. 在 fetch 之前设置过滤器时避免发送两个 httprequest;
    3. 过滤条件需要在运行时更改。
4

5 回答 5

5
productsDataSource._filter = { logic: 'and', filters: [
{ field: "Id", operator: "eq", value: 5 }]};

我发现这行得通。将内部属性设置为完整的过滤器对象。然后您可以在之后调用 fetch 。但是,我还没有找到一种在不触发提取的情况下更改页面大小的方法。

于 2013-08-09T08:28:20.893 回答
4

您可以filterDataSource配置中使用。DataSource这应该只发出一个具有您在配置中指定的过滤条件的请求。

于 2013-03-26T11:00:36.363 回答
3

在 dataSource 中设置 _filter 字段使用productsDataSource._filter = [{ field: "Id", operator: "eq", value: 5 }];,然后在准备好使用时手动发起对远程数据的请求productsDataSource.read();

于 2013-09-27T17:12:24.190 回答
1

尽管这是一个老问题,但它出现在谷歌搜索结果中。所以即使不知道对剑道版本是否有效:2013.1.319,但目前有一种方法

dataSource.query({
  sort: { field: "ProductName", dir: "desc" },
  page: 3,
  pageSize: 20
}); 

这可以在一次调用中设置多个选项,如排序、过滤分页等,并返回一个承诺。

http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#methods-query

于 2017-08-10T07:29:25.753 回答
0

将事件侦听器绑定到初始化小部件的数据源,然后使用过滤器方法。

datasource.one('requestEnd', function(){
   // initialize or/and bind widget
});
datasource.filter({ /*your filter*/ })
于 2014-10-21T14:19:38.420 回答