我正在使用Twitter Typeahead,在输入任何内容之前,我希望在输入框获得焦点时为用户提供一些值。
默认建议下的examples page就是一个例子:
var nflTeams = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('team'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
identify: function(obj) { return obj.team; },
prefetch: '../data/nfl.json'
});
function nflTeamsWithDefaults(q, sync) {
if (q === '') {
sync(nflTeams.get('Detroit Lions', 'Green Bay Packers', 'Chicago Bears'));
}
else {
nflTeams.search(q, sync);
}
}
$('#default-suggestions .typeahead').typeahead({
minLength: 0,
highlight: true
},
{
name: 'nfl-teams',
display: 'team',
source: nflTeamsWithDefaults
});
然而,在该示例中,他们对他们想要建议的值进行硬编码:
sync(nflTeams.get('Detroit Lions', 'Green Bay Packers', 'Chicago Bears'));
在我的情况下,我使用Bloodhound预取,我想建议预取返回的前几个选项。
编辑: 我想要展示的是服务器返回的前几个项目。服务器将负责显示它们的顺序。所以在上面的例子中,如果data / nfl.json包含:
[
{ "team": "San Francisco 49ers" },
{ "team": "Chicago Bears" },
{ "team": "Cincinnati Bengals" },
{ "team": "Buffalo Bills" },
{ "team": "Denver Broncos" },
{ "team": "Cleveland Browns" },
...
我只会展示最初的球队。显示的团队数量可能是一个参数。
我该怎么做?
答案 0 :(得分:4)
例如,您希望显示默认的2个第一项
function nflTeamsWithDefaults(q, sync) {
if (q === '') {
sync(nflTeams.all().slice(0, 2)); // slice(start,end)
}
else {
nflTeams.search(q, sync);
}
}