Kendo UI DataSource - 来自过滤器属性的 OData 查询字符串

Posted

技术标签:

【中文标题】Kendo UI DataSource - 来自过滤器属性的 OData 查询字符串【英文标题】:KendoUI DataSource - OData querystring from filter attribute 【发布时间】:2013-05-12 19:07:59 【问题描述】:

在当前项目中,我想使用 angular 的 $http 服务在我的 Kendo 数据源中发出 HTTP 请求,因为我正在使用本博客中描述的响应拦截器:

http://www.espeo.pl/2012/02/26/authentication-in-angularjs-application

我在我的应用程序中使用 KendoUI Grid 来显示数据,这些数据是从服务器以 JSON 格式获取的。出于某种原因,如果我在“传输”对象中指定一个函数并且仅将 URL 发送到服务器(example.com/odata/Foo),而不是完整查询(example.com /odata/foo?$filter=barId lt 100)。

我这样设置我的剑道数据源:

$scope.foo = new kendo.data.DataSource(
        type: "odata",
        pageSize: 25,
        serverPaging: true,
        serverFiltering: true,
        serverSorting: true,
        transport: 
            read: function (options) 
                $http(
                    url: '/odata/foo',
                    method: 'GET',
                    params: options.data
                )
                .success(function (result) 
                    options.success(result);
                );
            ,
            parameterMap: function (options, type) 
                return kendo.data.transports["odata"].parameterMap(options, type);
            
        

使用 Angular 的 $http 服务的 HTTP 请求可以正常工作,我对此没有任何问题。问题似乎是我无法从我的剑道数据源中的“过滤器”对象中获取查询部分(URL?$filter=[filter expression])。我尝试使用 parameterMap 选项,但也没有得到想要的结果。

【问题讨论】:

你是问如何使用angular的$http服务进行HTTP请求吗?到目前为止,您尝试过什么? 使用 Angular 的 $http 服务的 HTTP 请求工作正常,我对此没有任何问题。问题似乎是我无法从我的剑道数据源中的“过滤器”对象中获取查询部分(URL?$filter=[过滤器表达式])。我尝试使用 parameterMap 选项,但这也没有给出预期的结果。 Steffen,我也遇到了同样的问题。你有没有找到一种方法来做到这一点? 不,我通过使用 KendoDataSource 的错误/成功事件处理程序解决了这个问题。 【参考方案1】:

而不是在参数映射函数中这样做:

kendo.data.transports["odata"].parameterMap(options, type);

当传输上的读取属性映射到函数时,它似乎没有被调用。您可以在 transport.read 函数中调用它:

transport: 
  read: function (options) 
      var odataParams = kendo.data.transports["odata"].parameterMap(options.data, "read");
      $http(
        url: '/odata/foo',
        method: 'GET',
        params: odataParams
      )
      .success(function (result) 
        options.success(result);
      );
    
  

【讨论】:

以上是关于Kendo UI DataSource - 来自过滤器属性的 OData 查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

Kendo UI dataSource传输调用php函数

Kendo UI 网格复选框列

Kendo Ui 组合框 - 设置默认值

从现有的创建新的Kendo UI DataSource

AngularJS +Kendo UI Grid template

Kendo UI MVC 从 MultiSelect 小部件将 Grid 绑定到 DataSource