【发布时间】:2015-06-14 05:29:18
【问题描述】:
我正在使用最新版本的 typeahead.js (v0.11.1)。在对数据集值使用不同的 id 时,我观察到了奇怪的行为。
我创建了一个JSFiddle。这是js代码:
var ds = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
local: [{id: 1, name: "a b 1"}, {id: 2, name: "a b 2"}, {id: 3, name: "a"}],
identify: function(obj) { return obj.id; }
});
$('#go').typeahead(null, {
name: 'ds',
display: 'name',
source: ds
});
现在,如果我更改“本地”的数据,预输入可能会出现故障。这里只是一些例子:
将这些值之一用于“本地”(注意第三个元素是从“1”开始的随机数):
[{id: 1, name: "a b 1"}, {id: 2, name: "a b 2"}, {id: 15, name: "a"}]
[{id: 1, name: "a b 1"}, {id: 2, name: "a b 2"}, {id: 1849, name: "a"}]
现在当我输入文本框:“a b”时,预输入应该提示“a b 1”和“a b 2”,但实际上它只提示“a b 1”。
这可以通过以下方法之一解决:
-
将第三个元素的“id”属性更改为不以“1”开头的值。示例:
[{id: 1, name: "a b 1"}, {id: 2, name: "a b 2"}, {id: 23, name: "a"}]
-
将第三个元素的“name”属性更改为不以“a”开头的值。示例:
[{id: 1, name: "a b 1"}, {id: 2, name: "a b 2"}, {id: 15, name: "s"}]
删除 Bloodhound 构造函数对象的“识别”属性。
此外,如果我使用大于 2 的数字作为第一个元素的 id,如下所示:
[{id: 3, name: "a b 1"}, {id: 2, name: "a b 2"}, {id: 15, name: "a"}]
现在当我在文本框中输入“a b”时,没有任何建议!
【问题讨论】:
标签: typeahead.js twitter-typeahead