Typeahead.js 0.10.0版本现在使用一个称为建议引擎的单独组件来提供建议数据。Typeahead.js附带的建议引擎称为Bloodhound。
因此您无法“定义远程而不必定义数据集函数”。
这个例子使用远程数据源(我正在查询TheMovieDb API,例如尝试搜索“Aliens”)可以在这里找到:
http://jsfiddle.net/Fresh/UkB7u/
代码在这里:
const movies = new Bloodhound({
datumTokenizer: datum => Bloodhound.tokenizers.whitespace(datum.value),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: 'http://api.themoviedb.org/3/search/movie?query=%QUERY&api_key=f22e6ce68f5e5002e71c20bcba477e7d',
filter: movies => $.map(movies.results, movie => ({
value: movie.original_title
}))
}
});
movies.initialize();
$('.typeahead').typeahead(null, {
displayKey: 'value',
source: movies.ttAdapter()
});
注意filter函数如何允许您从非平凡的JSON数据源中选择要用作类型提示建议的内容。
更新Typeahead 0.11.1
对于那些正在使用较新版本的 typeahead 的人,可以在此处找到基于原始问题的工作示例:
http://jsfiddle.net/Fresh/bbzt9hcr/
与 Typeahead 0.10.0 相比,新版本(0.11.1)具有以下区别:
- "filter" 函数已更名为 "transform"。
- 不需要在 Bloodhound 对象上调用 initialize,也不需要在将其分配给远程源时调用 ttAdapter()。
- 现在需要在远程选项哈希中指定通配符(例如 %QUERY)。
bloodhound
提供的功能远远超出了我所需的范围。在 0.9.3 之前,它曾经非常简单。 - Zuhaib Ali