【问题标题】:Kendo AutoComplete Not Displaying剑道自动完成不显示
【发布时间】:2013-05-11 18:58:26
【问题描述】:

我有一个用于自动完成的自定义编辑器。正在调用 Web 服务并返回数据。但是,编辑器中没有任何内容。我在 schema.parse() 中放置了一个断点,但它从未被命中。我错过了什么?

function myAutoCompleteEditor(container, options) {
    $('<input data-text-field="Name" data-value-field="Name" data-bind="value:' + options.field + '"/>')
        .appendTo(container)
        .kendoAutoComplete({
            autoBind: false,
            suggest: true,
            delay: 500,
            dataSource: new kendo.data.DataSource({
                serverFiltering: true,
                transport: {
                    read: function (opt) {
                        $.getJSON("/myWebService/GetData");
                    },
                },
                schema: {
                    errors: function (e) {
                        return e;
                    },
                    parse: function (data) {
                        return data.Name;
                    }
                }
            })
        });
}

更新:

通过 JSON.stringfy(data) 显示的数据是这样的:

[{"地址":"123 1st St.","ID":"1","Name":"David"},{"Address":"234 2nd St.","ID":" 2","姓名":"史密斯"}]

更新 2:

现在的代码如下所示:

function myAutoCompleteEditor(container, options) {
    $('<input data-text-field="Name" data-value-field="Name" data-bind="value:' + options.field + '"/>')
        .appendTo(container)
        .kendoAutoComplete({
            dataValueField: "Name",
            autoBind: false,
            suggest: true,
            delay: 500,
            dataSource: new kendo.data.DataSource({
                serverFiltering: true,
                transport: {
                    read: {
                        url: function (opt) {
                            return "/myWebServices/GetData/" + opt.filter.filters[0].value;
                        },
                        dataType: "json"
                    }                        
                },
                schema: {
                    errors: function (e) {
                        return e;
                    }
                },
                data: function (response) {
                    return $.parseJSON(response);
                }
            })
        });
}

更新 3:

最终通过删除架构和数据部分使其正常工作。接受 OnaBai 的回答,因为他肯定为我指明了正确的方向。最终代码如下所示:

function myAutoCompleteEditor(container, options) {
    $('<input data-text-field="Name" data-value-field="Name" data-bind="value:' + options.field + '"/>')
        .appendTo(container)
        .kendoAutoComplete({
            dataValueField: "Name",
            autoBind: false,
            suggest: true,
            delay: 500,
            dataSource: new kendo.data.DataSource({
                serverFiltering: true,
                transport: {
                    read: {
                        url: function (opt) {
                            return "/myWebServices/GetData/" + opt.filter.filters[0].value;
                        },
                        dataType: "json"
                    }                        
                }
            })
        });
}

【问题讨论】:

    标签: kendo-ui kendo-grid


    【解决方案1】:

    问题在于read函数的实现。此函数应使用您要返回的数据调用opt.success。您正在做的是从 URL 检索数据,但您没有返回此类数据。

    但在您的情况下,您似乎没有做任何特别的事情(不需要定义函数)。所以你可以把它定义为Object,然后定义transport.read.url

    你可以使用:

    dataSource: new kendo.data.DataSource({
        serverFiltering: true,
        transport: {
            read: {
                url : "/myWebService/GetData"
            }
        },
        schema: {
            parse: function (data) {
                return data.Name;
            }
        }
    })
    

    EDIT:对于使用数据作为服务器返回它并且不必解析,您可以使用:

    function myAutoCompleteEditor(container, options) {
        $('<input data-text-field="Name" data-value-field="Name" data-bind="value:' + options.field + '"/>').appendTo(container).kendoAutoComplete({
            autoBind      : false,
            suggest       : true,
            delay         : 500,
            dataValueField: "Name",
            dataSource    : new kendo.data.DataSource({
                transport: {
                    read: {
                        url : "/myWebService/GetData"
                    }
                }
            })
        });
    }
    

    诀窍是定义dataValueField,它定义返回数组的哪个值是autocomplete 的值。

    【讨论】:

    • OnaBai,感谢您的回复。我遵循了您的代码,并且能够在 parse() 上获得断点。但是,数据显示“未定义”,尽管其中确实有数据([[object, object][object,object]....])。我如何引用它?另外,我对 url 进行了硬编码,但实际上我需要将 url 设置为“/myWebService/GetData/”+(无论用户输入是什么),我该怎么做?
    • 拜托,你能显示返回数据的格式吗?尝试在解析函数中插入console.log(data) 或alert(JSON.stringify(data)); 并更新原始帖子。我会研究一下。
    • 奥纳拜,谢谢。我已经更新了关于数据的原始帖子。
    • OnaBai,添加 dataValueField 仍然对我不起作用。 schema.errors 中的断点实际上被击中,但是当我查看 e 对象时,它包含与 Web 服务返回的完全相同的数据并且没有错误。我已经更新了代码以向您展示 schema.errors()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 2021-10-19
    • 2015-09-20
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多