在当前项目中,我想使用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查询会被切断。 / odata / foo?$ filter = barId lt 100)。
我设置了这样的Kendo DataSource:
$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);
}
}
HTTP请求使用$ http服务的角度工作正常,我没有遇到问题。问题似乎是我无法从我的kendo数据源中的“过滤器”对象获取查询部分(URL?$filter=[filter expression])
。我尝试使用parameterMap选项,但是也没有给出所需的结果。
答案 0 :(得分:1)
而不是在参数map函数中执行此操作:
kendo.data.transports["odata"].parameterMap(options, type);
当传输上的read属性映射到函数时,似乎没有调用。您可以在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);
});
}
}