2014-02-19 3 views
3

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

Система Аякса, так что я не могу просто изменить имя на обновления, я пытаюсь передать его другой отпечаток, как на ниже в 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() 
}) 

Любой есть идеи, что я делаю неправильно?

EDIT: После обновления моих машинописные файлов с помощью запроса тянущего упоминаемого @jharding, я могу получить его, чтобы сбросить, но не reinitialise.Using следующего:

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; 
} 
+0

Вы не можете переинициализировать ищеек прямо сейчас, но эта способность будет существовать в v0. 10,2. Вот связанный запрос на тягу: https://github.com/twitter/typeahead.js/pull/703 – jharding

+0

Отлично! Я схватил этот запрос на растяжение и обновил свои файлы с помощью ворчания в качестве теста. Я могу получить его для сброса, но я, похоже, не могу его повторно инициализировать: – MrTomTom

+0

Попробуйте передать «true» в метод initialize при повторной инициализации. Я все еще работаю над тем, что я хочу, чтобы API был, если у вас есть какие-то мысли, вы должны опубликовать их по запросу pull. – jharding

ответ

7

вероятно Вы имели ответ на это уже но я думал, что я хотел бы добавить код, который работал для меня

//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); 

Надеется, что это помогает

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^