【问题标题】:How to use Bloodhound Suggestion Engine? (Multi property objects being passed locally)如何使用 Bloodhound 建议引擎? (本地传递的多属性对象)
【发布时间】:2016-10-25 13:26:18
【问题描述】:

所以我传递了一个如下所示的对象:

[{id: 1, name: 'Project A', type: 'C'}, {id: 2, name: 'Project B', type: 'A'},]

我正在尝试像这样通过 Bloodhound 引擎:

    var mySource = new Bloodhound({
    identify: function (obj) { return obj.id; },
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
    local: datasource
});

像这样被 typeahead.js 使用:

$(control)
    .typeahead({
            hint: true,
            highlight: true,
            minLength: 0
        },
        {
            source: mySource
        });

但它根本不起作用。我不确定我做错了什么。

我只希望名称可搜索。 稍后会为.on('typeahead:autocomplete') 传递 ID 和类型。


编辑: 控制台中没有错误,在 Bloodhound 对象创建之后立即输入 console.log(mySource); 会生成一个 Bloodhound 对象:

【问题讨论】:

  • 控制台有错误吗?你可能需要给它一个名字:{ name: 'my-typeahead', source: mySource }
  • 这是因为你的.typeahead()下面设置错了检查。您的 mySource 是 Bloodhound 对象,但您没有名称或 displayKey
  • Joseph:我发布了一些控制台信息。 (虽然问题现在已经解决了)- 不过还是谢谢!

标签: javascript arrays typeahead.js bloodhound


【解决方案1】:

首先在你的 js 中设置 Bloodhound:

var dataSetBloodhound = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    local: data
});

data 是数组中的建议列表。
我的例子是

data = [ { name: "Foo", url: "/bar.jpg" }, etc, etc ]

这就是我在Bloodhound.tokenizers.obj.whitespace('name') 中使用名称的原因,因为我希望我的建议是数据数组中的name

在我的 html 中我有我的输入:

<input id="quick-search-input" type="text" class="form-control" placeholder="Products" data-provide="typeahead"/>
//The important thing here is 'data-provide="typeahead"'

建议框将根据哪个输入进行操作。

然后设置后面的js:

$('#quick-search-input').typeahead({
    hint: true,
    highlight: true,
    minLength: 1
},
{
    name : 'NameForFormInput',
    displayKey: 'name',
    templates:
    {
        suggestion: function(data)
        {
            return '<li class="list-group-item">
                    <p class="predictionText">'+data.name+'</p></li>';
        }
    },
    source : dataSetBloodhound
});

我认为这是你出错的地方,因为我在设置它时遇到了类似的问题,但在我实现模板时修复了它。此外,css 会根据您使用的不同而有所不同。

【讨论】:

  • 这很完美!谢谢!事实证明我需要正确实现displayKey 并使用templates——我之前一直使用非猎犬数据集作为一维数组,它不需要templatesdisplayKey
  • @Bitz Ya 大约一周前我遇到了同样的问题,它让我卡了一段时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多