如何使用 Bloodhound 建议引擎? (多个 属性 对象在本地传递)
How to use Bloodhound Suggestion Engine? (Multi property objects being passed locally)
所以我传递了一个如下所示的对象:
[{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 对象:
首先在你的 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 也会根据您使用的内容而有所不同。
所以我传递了一个如下所示的对象:
[{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 对象:
首先在你的 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 也会根据您使用的内容而有所不同。