2014-10-25 10 views
5

Ho difficoltà a richiamare le funzioni typeahead.js come val, open, close, ecctypeahead le funzioni di chiamata .VAL .Open .close ecc tiri errori

Il typeahead funziona correttamente sull'elemento di ingresso in quanto visualizza le voci ma quando provo a chiamare qualsiasi funzione typeahead ottengo questo errore:

Uncaught Error: one of local, prefetch, or remote is requiredmessage: "one of local, prefetch, or remote is required 

il mio codice di inizializzazione è la seguente:

var currentMedicalAid; 

var medicalAidList = $('#medicalAidList'); 


var medicalAidengine = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('MedicalAid1'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    limit: 5, 
    prefetch: { 
     url: '/api/Search/GetMedicalAidList', 
    } 
}); 


medicalAidengine.initialize(); 


medicalAidList.typeahead(null, { 
    name: 'MedicalAid1', 
    displayKey: 'MedicalAid1', 
    // `ttAdapter` wraps the suggestion engine in an adapter that 
    // is compatible with the typeahead jQuery plugin 
    source: medicalAidengine.ttAdapter() 
}).blur(function() { 
    match = false; 
    for (var i = medicalAidengine.index.datums.length - 1; i >= 0; i--) { 
     if ($(this).val() == medicalAidengine.index.datums[i].MedicalAid1) { 
      currentMedicalAid = medicalAidengine.index.datums[i].MedicalAidID; 
      match = true; 
     } 
    }; 
    if (!match) { 
     currentMedicalAid = '00000000-0000-0000-0000-000000000000'; 
     $(this).val(''); 
     medicalAidList.typeahead('val', ''); // throws error 
    } 
});; 

Ogni volta eseguito una di queste funzioni, ottengo un errore:

medicalAidList.typeahead('val', ''); 
or 
$('#medicalAidList').typeahead('val',''); 

Qualsiasi aiuto sarebbe molto apprezzato

Grazie

+0

Cosa restituisce esattamente "/ api/Search/GetMedicalAidList"? È questo JSON? Puoi verificare se questa richiesta è stata eseguita correttamente nel tuo browser. Aiuterà anche un esempio di JSON restituito. –

+0

Il JSON è perfetto perché la lista funziona. Non ha nulla a che fare con l'attuale typeahead che funziona, perché funziona perfettamente. Quando digito il menu a discesa, ottengo una lista che appare come dovrebbe. Non riesco ad accedere alle funzioni typeahead - ho lo stesso problema su tutti i miei tipi in anticipo (alcuni usano altri locali remoti, non riesco ad accedere al tipo successivo –

+0

Ok. Ho chiesto alla mia domanda come typeahead richiede una serie di oggetti javascript per i suoi datum , non oggetti JSON. Nell'esempio manca una funzione "filtro" nella dichiarazione "prefetch" .Vedi questo esempio https://twitter.github.io/typeahead.js/examples/#prefetch. –

risposta

1

Il metodo initialize è asincrona. È possibile che parte del tuo codice sia in esecuzione quando il motore Bloodhound non è completamente inizializzato. Potrebbe essere necessario avvolgere il resto del codice in una richiamata:

// initialize returns a jQuery promise, so we can call its done method 
medicalAidengine.initialize().done(function(){ 

// Rest of your code 

}) 
+0

Sebbene sia corretto, è non pertinente alla mia domanda Il typeahead funziona correttamente non è possibile eseguire i suoi metodi –

+0

@PeterStulinski l'hai provato e non funziona ancora? – parchment

+0

Questo è corretto - non risolve il problema. –