Не удается обновить твиттер typeahead.js prefetch отпечаток после начальной загрузки

Я использую typeahead (0.10.1) в приложении, чтобы вернуть список клиентов, используя предварительную выборку ищейки. Я не могу решить, как обновить/повторно инициализировать бладхаунда новым отпечатком пальца, чтобы после того, как новый клиент вставлен, он будет использовать новый отпечаток и, следовательно, включить новый клиент.

Система - это 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()
})

У кого-нибудь есть идеи, что я делаю неправильно?

РЕДАКТИРОВАТЬ: После обновления моих файлов типа head, используя запрос pull, упомянутый @jharding, я могу получить его до reset, но не повторно инициализировать. Использует следующее:

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;
}
2 ответа

Вероятно, у вас уже был ответ на этот вопрос, но я подумал, что добавлю код, который работал у меня

//This seems to refresh my prefetch data
clients.clearPrefetchCache();
//not sure whether setting to true does anything 
//though, but according to the bloodhound.js it should force a reinitialise
clients.initialize(true);

Надеюсь, что это поможет


В моем случае, я получил свои результаты от url как данные JSON, используя prefetch, и хотел очистить только данные предварительной выборки (поскольку мне нужно очистить его после добавления некоторых других данных)

clients.initialize(true); метод работал у меня

licensed under cc by-sa 3.0 with attribution.