【发布时间】:2014-07-29 19:28:32
【问题描述】:
我有一个带有自动完成功能的搜索字段,它的初始化如下:
var reposVenda = new Bloodhound({
datumTokenizer: function (d) { return Bloodhound.tokenizers.whitespace(d.bairro); },
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: {
url: urlAutoCompleteVenda
}
});
var reposAluguel = new Bloodhound({
datumTokenizer: function (d) { return Bloodhound.tokenizers.whitespace(d.bairro); },
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: {
url: urlAutoCompleteAluguel
}
});
reposVenda.initialize();
reposAluguel.initialize();
$('#searchQuery').typeahead(null, {
name: 'bairros',
displayKey: 'bairro',
source: reposVenda.ttAdapter(),
templates: {
suggestion: Handlebars.compile([
'<p class="bairro-autocomplete">{{bairro}}</p>'
].join(''))
},
queryTokenizer: queryTokenizer
});
现在我需要在用户单击页面上的按钮时更改源:
$(".opt-busca-home").click(function (e) {
e.preventDefault();
var idItem = $(this).attr("id");
buscaAtual = idItem.replace("opt-", "");
if (buscaAtual == "comprar") {
var autocomplete = $('#searchQuery').typeahead();
autocomplete.data('typeahead').source = reposVenda.ttAdapter();
}
else {
var autocomplete = $('#searchQuery').typeahead();
autocomplete.data('typeahead').source = reposAluguel.ttAdapter();
}
});
问题是当我单击按钮更改源时,控制台告诉我'Uncaught TypeError: Cannot set property 'source' of undefined'
我尝试了所有可能的方法,但没有成功。预输入有效,但仅适用于初始化的源。我做错了什么?
【问题讨论】:
-
我的回答对你有帮助吗?
-
我使用了 destroy/recreate typeahead 方法,因为我认为它更容易实现。
-
销毁/重新创建方法并不容易实现。只需比较答案中的代码即可。此外,bloodhound clear 和 re-initialize 方法的编写完全按照他们所说的进行,因此不需要销毁和重新创建。无论如何,很高兴你有一个适合你的解决方案。
-
我认为您的方法并不容易,因为我需要清除所有缓存,然后再向服务器请求以获取新列表。只销毁前面的类型,让猎犬独自一人恕我直言,对我需要的东西更友好。
-
啊,我明白了。是的,我的方法会触发重新获取。我会留下我的答案,因为如果使用本地或远程数据源,这将是一个好方法。
标签: javascript jquery twitter-bootstrap typeahead.js typeahead