【问题标题】:Kendo datasource shema.data does not work for dropdownlistKendo 数据源 shema.data 不适用于下拉列表
【发布时间】:2014-08-19 08:36:36
【问题描述】:

我有 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
    },
    .....
  ]
}

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

类型错误:d.d 未定义; 并且下拉列表没有显示我上面的 json 响应。 当我使用 odata web api 填充剑道网格时,数据源中的以下代码解决了我的问题:

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

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

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

【问题讨论】:

    标签: javascript kendo-ui odata


    【解决方案1】:

    您的数据位于响应的内部对象“值”上,您的响应包括页面大小、元数据 url,因此我们需要将 kendo dataSource 可以理解的数据作为示例

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

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

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

    【讨论】:

    • 非常感谢您的回答!我刚刚从您的示例中添加了这个total: function(response) { return response.odata.count; },它对我有用。我使用“type:'odata'”来为级联下拉菜单应用服务器过滤。
    猜你喜欢
    • 2015-08-19
    • 1970-01-01
    • 2014-04-05
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 2012-12-15
    • 2017-08-18
    相关资源
    最近更新 更多