Kendo数据源shema.data不适用于下拉列表

时间:2014-08-19 08:36:37

标签: javascript kendo-ui odata

我有Odata WebApi,我想用我的数据填充我的下拉列表。 我有数据源:

var postsDataSource = new kendo.data.DataSource({ type: 'odata', serverFiltering: true, transport: { read: { url: "/odata/Posts", dataType: "json" }, }, schema: { model: kendo.data.Model.define({ Id: "Id", RegionId: "RegionId" }), data: function (res) { debugger;//this code is inaccessible! console.log(res); return res.value; } }, });

和下拉列表如下:

var posts = $("#searchPost").kendoDropDownList({
            optionLabel: "Выберите регион...",
            dataTextField: "NameRu",
            dataValueField: "Id",
            dataSource: postsDataSource,
        }).data("kendoDropDownList");

这部分代码执行odata查询并在firebug的控制台中返回以下json响应:

{
  "odata.metadata":"http://localhost:11029/odata/$metadata#Posts","odata.count":"13","value":[
    {
      "Id":0,"Number":"Lenina45","RegionId":1,"NameRu":"\u041b\u0435\u043d\u0438\u043d\u0430 45","NameKz":"\u041b\u0435\u043d\u0438\u043d\u0430 45","ShortName":"\u041b\u0435\u043d\u0438\u043d\u0430 45","DateBegin":null,"DateEnd":null,"OptimisticLockField":null
    },{
      "Id":1,"Number":"Zhumabaeva15","RegionId":2,"NameRu":"\u0416\u0443\u043c\u0430\u0431\u0430\u0435\u0432\u0430 15","NameKz":"\u0416\u0443\u043c\u0430\u0431\u0430\u0435\u0432\u0430 15","ShortName":"\u0416\u0443\u043c\u0430\u0431\u0430\u0435\u0432\u0430 15","DateBegin":null,"DateEnd":null,"OptimisticLockField":null
    },
    .....
  ]
}

在此响应之后,我收到以下奇怪的错误:

TypeError:d.d未定义; 并且dropdownlist没有显示我在json响应之上。 当我使用odata web api填充kendo网格时,数据源中的以下代码解决了我的问题:

schema: {
                    data: function (res) {
                        return res.value;
                    }
                },

但现在,当我将它用于下拉列表时,它根本不起作用,它无法访问。

PS>抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

您的数据在您的回复的内部对象“值”上,您的回复包括页面大小,元数据网址,因此我们需要删除kendo dataSource可以理解的数据,这是一个示例

:注意删除“type:'odata'”并检查,因为你说的数据来自Data函数的数据源,我认为不需要它。

var postsDataSource = new kendo.data.DataSource({
                serverFiltering: true,
                transport: {
                    read: {
                        url: "/odata/Posts",
                        dataType: "json"
                    },
                },
                schema: {
                    model: {
                        Id: "Id",
                         fields: {
                           Id: { type: "number" },
                           NameRu: { type: "string" },
                            NameKz: { type: "string"},
                            ShortName: { type: "string" }
                        }
                    },
                    data: function (response) {
                        return response.value;
                    },
                    total: function(response) {
                     return response.odata.count; 
                     }
                },
            });

试试这个希望这会有所帮助。