【发布时间】:2014-02-19 20:11:33
【问题描述】:
我在应用程序中使用 typeahead (0.10.1) 来返回使用 Bloodhound 预取的客户端列表。我不知道如何使用新的指纹更新/重新初始化寻血犬,以便在插入新客户端后它将使用新的指纹并因此包含新客户端。
系统是 ajax,所以我不能只在刷新时更改名称,我试图在 reinitializeclient() 中按照下面的方法向它传递另一个指纹,但它不起作用:
var clientthumbprint = "initialname";
var clients = new Bloodhound({
limit: 5,
prefetch:{
url: '/urltofeed/',
thumbprint:getthumbprint()
},
datumTokenizer: function(d) {
return Bloodhound.tokenizers.whitespace(d.label);
},
queryTokenizer: Bloodhound.tokenizers.whitespace
});
clients.initialize();
function reinitializeclient(newthumbprint){
//This is called when a client is saved
clientthumbprint = newthumprint;
clients.initialize(); //this didn't work
}
function getthumbprint(){
return clientthumbprint;
}
$('#search_user').typeahead({
minLength: 2,
},
{
displayKey: 'label',
source: clients.ttAdapter()
})
有人知道我做错了什么吗?
编辑:使用@jharding 提到的拉取请求更新我的预输入文件后,我可以重置它,但不能重新初始化。使用以下内容:
function initialize_clients(){
clients = new Bloodhound({
limit: 5,
prefetch:{
url: '/pathtojson/',
thumbprint:getthumbprint()
},
datumTokenizer: function(d) {
return Bloodhound.tokenizers.whitespace(d.label);
},
queryTokenizer: Bloodhound.tokenizers.whitespace
});
clients.initialize();
};
function resetclients(){
clientthumbprint = 'somenewthumbprint';
clients.reset();//this works - after running nothing will return in search
initialize_clients();//this is not working
}
function getthumbprint(){
return clientthumbprint;
}
【问题讨论】:
-
您现在无法重新初始化 Bloodhounds,但该功能将在 v0.10.2 中存在。这是相关的拉取请求:github.com/twitter/typeahead.js/pull/703
-
太棒了!我抓住了那个拉取请求,并用 grunt 作为测试更新了我的文件。我可以重置它,但我似乎无法重新初始化它:
-
尝试在重新初始化时将
true传递给initialize 方法。我仍在研究我想要的 API,如果您有任何想法,您应该将它们发布在拉取请求中。 -
@jharding 如果我通过尝试,它会重新初始化,但它仍在使用旧数据。 clients.initialize(true); - 有任何想法吗。将我的想法发布到拉取请求中。本质上,我希望能够再次指定要预取的来源。
标签: javascript twitter-bootstrap-3 typeahead.js bloodhound