Kendo ui Kendo数据源:如何在获取之前设置过滤器,而不发送两个HttpRequest

Kendo ui Kendo数据源:如何在获取之前设置过滤器,而不发送两个HttpRequest,kendo-ui,datasource,odata,Kendo Ui,Datasource,Odata,环境: 剑道版本:2013.1.319 数据源: productsDataSource = new kendo.data.DataSource({ type: "odata", transport: { read: "http://www.mydomain.com/odata.svc/products", dataType: "json", contentType: "application/json" } sch

环境:

  • 剑道版本: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([{字段:“Id”,运算符:“eq”,值:5}])//这将发送一个httprequest

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

  • 问题:

  • 需要使用数据源的获取方法进行数据处理(小部件初始化、数据绑定等)
  • 在获取之前设置过滤器时,避免发送两个httprequest
  • 需要在运行时更改筛选条件
您可以在
数据源
配置中使用。这应该只发出一个带有您在
DataSource
配置中指定的过滤条件的请求

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

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

使用
productsDataSource在数据源中设置_filter字段。_filter=[{field:“Id”,operator:“eq”,value:5}]
然后在准备就绪时使用
productsDataSource.read()手动启动远程数据请求

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

datasource.one('requestEnd', function(){
   // initialize or/and bind widget
});
datasource.filter({ /*your filter*/ })

尽管这是一个老问题,但它出现在谷歌搜索结果中。因此,尽管我不知道它是否适用于剑道版本:2013.1.319,但目前有一种方法

dataSource.query({
  sort: { field: "ProductName", dir: "desc" },
  page: 3,
  pageSize: 20
}); 
这可以在一个调用中设置多个选项,如排序、筛选分页等,并返回一个承诺


您好,问题是我必须在运行时更改过滤器条件。配置只能设置一次,对吗?您可以使用
datasource设置筛选器配置。read``只要您愿意,只要您设置了新的筛选器条件,Kendo UI就会调用
transport。read`使用新的条件。datasource中唯一具有回调函数的方法是fetch,这就是我选择它的原因。调用dataSource.read()后,dataSource.data()仍然为空,这成为一个问题,因为在此之后我无法初始化我的小部件。在调用fetch方法之前是否可以重置过滤器,并且不自动发送httprequest(在fetch之前)?谢谢。您如何/在哪里使用数据源?当初始化DropDownList和“源绑定+剑道模板”等小部件时,作为网格的小部件具有不从数据源加载的选项(作为自动绑定)。小部件是可以的,因为不需要更改过滤条件;对于“源绑定+剑道模板”,我必须在获取回调中更新source属性(在viewModel中)。你知道这一点吗?我认为不建议更改_过滤器。telerik的团队应该在绑定操作之前提供更好的方法来操作过滤器阵列。filter方法会导致第二个服务器操作,这一点都不好。目前,更改_过滤器似乎是唯一的解决方案,但是,请注意,他们可能会在将来更改此变量的名称,然后您的应用程序可能会中断。