我正在尝试在一个简单的HTML应用程序中使用Typeahead / Bloodhound,该应用程序是从一个约有1000条名称记录的小型数据库中获取的。我想获取以第一个字母(最后一个,第一个)开头的名称的子集,这应该是唯一需要获取的名称,显示的建议应在输入其他字母时过滤掉。
因此,例如在以下示例中使用字母G。我进一步更新了我的代码,以用于实名输入,但是我的问题如下。
示例1:如果我只是如图所示预取,则一切正常:
var players = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('NAM'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: '/json.php?dat=players&qry=G'
});
会弹出前5个名称,当我键入更多名称时,列表会正确过滤。可以,但是设置正确的名称后不能动态显示。
我可以接受整个数据库的预取,但这似乎也不起作用。没有完成数据提取或达到了一些限制。
示例2:下一步是将其移至远程:
var players = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('NAM'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/json.php?dat=players&qry=G'
}
});
这适用于第一个字母,但不执行进一步的过滤。建议列表不会更改,也不会缩小范围。不管我键入什么,似乎前五个条目之后什么都没显示。
示例3:最后,我想使用类似以下的内容:
var players = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('NAM'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/json.php?dat=players&qry=',
prepare: function(query, settings) {
settings.url += query.substr(0, 1);
return settings;
}
},
limit: 100
});
即使我每次都提交完整的查询字符串,并且每次完成新的远程提取的每个字母后,这种方法仍然行不通。 (这似乎不正确,并且网络流量比我想要的要多得多。)建议列表缩短了,但很快变得少于5个条目,并且没有返回名称集json中的其他数据补充。
示例1在http://acblunit391.org/test1.php中可用
示例2在http://acblunit391.org/test2.php下可用
示例3可在http://acblunit391.org/test3.php
使用0.11.1和合适的jquery 1.10.2似乎有效。