首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Bloodhound获得Typeahead以处理JSON响应?

如何使用Bloodhound获得Typeahead以处理JSON响应?
EN

Stack Overflow用户
提问于 2015-02-09 22:19:29
回答 1查看 2.5K关注 0票数 1

我正在努力弄清楚如何让typeahead.js与bloodhound.js使用我的JSON结构。我想要的是预加载JSON对象的提前类型功能,该对象保留在作用域内。以下是部分:

Data/All url返回具有以下结构的application/json响应:

{"Id":1010,“名称”:“Andijvie ",”类别“:”Blad- en stengel gewassen"},{"Id":1020,“名称”:“花椰菜",”类别“:”Blad- en stengel gewassen",(.)

此外,我认为:

代码语言:javascript
复制
<div id="select-crop">
    <input class="typeahead" type="text" placeholder="Select crop">
</div> 

在JavaScript中:

代码语言:javascript
复制
var cropsSuggestionEngine = new Bloodhound({
    datumTokenizer: function (datum) {
        return Bloodhound.tokenizers.whitespace(datum.Name);
    },
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    prefetch: {
        url: "/Crop/All",
        filter: function (data) {
            return $.map(data, function(crop) {
                return {
                    value: crop.Name
                };
            });
        }
    }
});

$(function() {

    cropsSuggestionEngine.initialize();

    $('#select-crop .typeahead').typeahead({
        hint: true,
        highlight: true,
        minLength: 1
    }, {
        name: 'Crops',
        displayKey: 'Name',
        source: cropsSuggestionEngine.ttAdapter(),
        templates: {
            empty: [
            '<div class="empty-message">',
            'unable to find any results that match the current query',
            '</div>'
            ].join('\n'),
            suggestion: Handlebars.compile('<p><strong>{{name}}</strong></p>')
        }
    }); 

});

当某些内容被输入到typeahead字段中时,它总是给出一个消息,即没有任何与查询匹配的结果。当我通过FireBug查看DOM时,我看到数据由一个包含空元素的长列表组成。

我希望有猎犬/打字经验的人能为我指明正确的方向。我现在似乎想不出来了。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-10 00:08:13

在预取数据集中的建议对象中,The无法找到任何“Name”键。

在定义“提前输入”时,您是说'displayKey‘键是"Name“。但是,当您完善数据集时,过滤器函数(在cropSuggestionEngine中)返回一个json对象数组,如下所示:[{value: "Andijvie "},{value: "Broccoli "}, ...]

所以没有什么“名字”钥匙。

如果将筛选器函数更改为返回{ Name: crop.Name },则代码可以正常工作。

代码语言:javascript
复制
filter: function(data) {
    return $.map(data, function(crop) {
        return {
            Name: crop.Name
        };
    });
}

希望能帮上忙!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28420522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档