Javascript typeahead.js显示所有结果,而不仅仅是匹配结果
我无法让typeahead.js仅返回与输入的查询匹配的结果。例如,如果我在我的公司搜索栏中输入“Facebook”,它将返回所有公司(“雅虎”、“谷歌”等),即使其中大多数公司与查询不匹配。我不做任何服务器端数据处理。我的datumTokenizer函数应该处理这个过滤吗 此外,我注意到每次修改查询时,它都会为每个数据输入filter()函数。因此,当我将查询从“G”更改为“Go”时,filter:function(companys\u list)中的console.log()语句将打印3000次 这是我的密码:Javascript typeahead.js显示所有结果,而不仅仅是匹配结果,javascript,typeahead,bloodhound,Javascript,Typeahead,Bloodhound,我无法让typeahead.js仅返回与输入的查询匹配的结果。例如,如果我在我的公司搜索栏中输入“Facebook”,它将返回所有公司(“雅虎”、“谷歌”等),即使其中大多数公司与查询不匹配。我不做任何服务器端数据处理。我的datumTokenizer函数应该处理这个过滤吗 此外,我注意到每次修改查询时,它都会为每个数据输入filter()函数。因此,当我将查询从“G”更改为“Go”时,filter:function(companys\u list)中的console.log()语句将打印300
var companies = new Bloodhound({
datumTokenizer: function (datum) {
return Bloodhound.tokenizers.whitespace(datum.name);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/json/company_list.json',
filter: function (companies_list) {
// Map the remote source JSON array to a JavaScript object array
return $.map(companies_list, function (company) {
console.log('mapping')
return {
name: company.name
};
});
}
}
});
// Initialize the Bloodhound suggestion engine
var promise = companies.initialize();
promise.done(function() {console.log('Bloodhound initialized!')});
// passing in `null` for the `options` arguments will result in the default
// options being used
$('#form-company').typeahead(null, {
name: 'companies',
displayKey: 'name',
// `ttAdapter` wraps the suggestion engine in an adapter that
// is compatible with the typeahead jQuery plugin
source: companies.ttAdapter()
});
下面是我的url返回内容的示例:
[{"name": "Yahoo"}, {"name": "Sanchai Technologies "}, {"name": "Oliver Wyman"}, {"name": "University of Oregon"}, ...]
我使用remote是因为预回迁绝对不适合我。它只给了我建议[反对],这毫无意义。我希望在初始化时使用prefetch/remote加载整个.json文件,而不向服务器发出任何进一步的请求。所以我认为预取是我更好的选择(小文件,77kB),但它根本不起作用
非常感谢你的帮助 我想你错过了“准备”。试试我做的事
var information = {
url: urlRoot,
prepare: function (query, settings) {
settings.type = "POST",
settings.url += '?prefix=' + query;
return settings;
}
};
var names = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('navn'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: information,
});
或者,你可以看看我在那里的帖子。它只返回用户在文本框中输入的结果 我也有这个问题。问题是远程URL返回标准列表,无法将查询传递给它,从而返回与搜索词匹配的筛选子集。
因此,筛选器实现必须处理筛选结果,以便它们与查询匹配。您使用的是哪个版本的
typeahead
?我认为预取
不再有效,仅供参考,请参阅。我无法解释为什么使用remote
返回所有结果,我正在对同一问题进行故障排除。是否有关于仅显示匹配术语的更新?您解决了吗?我也有同样的行为,但只在一只猎犬身上像你一样使用过滤器。