【发布时间】:2015-10-30 13:18:05
【问题描述】:
我在 0.11.1 版中使用 Twitter Typeahead。现在我正试图让远程正常工作,但不知何故我认为我的行为很奇怪。
这是带有本地数组的工作代码:
var localArray = [{"value":"test0"},{"value":"test1"},{"value":"test2"},{"value":"test3"},{"value":"test4"}];
var myds = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
local: localArray
});
$(function () {
$("#my-input").typeahead({},
{
name: 'ds1',
source: myds,
display: 'value'
});
});
现在我尝试设置远程数据。我所做的只是将本地更改为远程并提供 URL 并添加查询参数。它将提供与 localArray 完全相同的结构和数据(它目前忽略查询并始终提供 localArray 的内容只是为了测试它)。我在 Chrome 开发人员工具中检查了该查询实际上已执行并返回 localArray 的内容:
var myds = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/autocomplete?query=%QUERY',
wildcard: '%QUERY'
}
});
$(function () {
$("#my-input").typeahead({},
{
name: 'ds1',
source: myds,
display: 'value'
});
});
搜索test 时不知何故这不起作用。搜索tes 时,我仍然得到结果,但是当我搜索test 时,没有提供自动完成的结果。还有其他的词这不起作用,它似乎遵循相同的模式,就像找不到完整的词而找到部分词一样。知道是什么导致了这种行为或如何解决它吗?
我的猜测是远程数据源必须是另一种格式,但我找不到它的外观。 typeahead 页面上的所有示例看起来都非常相似...
【问题讨论】:
-
你的远程数据是什么格式的?
-
纯json:
[{"value":"test0"},{"value":"test1"},{"value":"test2"},{"value":"test3"},{"value":"test4"}] -
我想看看您是否遇到了一个已知的预输入错误。您能否在您的预输入设置中添加
limit: 2并查看其他搜索是否开始工作(当然只返回 2 个结果)? -
请注意,如果您手动进行更改(就像我所做的那样),您只需向下移动
rendered += suggestions.length;行。不用担心规范文件,这只是一个测试。 -
好的,所以我用我的其余代码进行了测试,现在一切正常。非常感谢,非常感谢您的帮助!请发表您的评论,建议将该行作为答案,以便我接受:)
标签: typeahead.js twitter-typeahead