剑道数据源示意图.数据不能用于下拉列表

Kendo datasource shema.data does not work for dropdownlist

本文关键字:不能 用于 下拉列表 数据 示意图 数据源      更新时间:2023-09-26

我有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 is undefined;下拉列表没有显示json响应。当我用odata web api填充kendo grid时,数据源中的以下代码解决了我的问题:

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

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

PS>对不起,我的英语不好。

你的数据是在你的响应的内部对象"值"上,你的响应包括页面大小,元数据url所以我们需要修饰kendo dataSource可以理解的数据这里是一个例子

:注意删除"type: 'odata'"并检查,因为您说的是数据源,其中数据来自数据函数,我认为不需要它。

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; 
                     }
                },
            });

试一下,希望能有所帮助。