2016-03-30 6 views
0

zwischen remote und lokalen Quellen umschalten Ich habe mit jeder Einstellung herumgespielt, die ich mir vorstellen kann, zB .clear() und .typeahead('destroy'), und sobald ich die Quelle als Remote eingestellt habe kann ich nicht Machen Sie den Typahead eine lokale Quelle verwenden.Mit Typeahead.js/Bloodhound.js zwischen

Irgendwelche Gedanken?

Hier ist der Code unter dem onclick aufgerufen wird:

var create_typeahead = function(is_remote, titles){ 

    filters_typeahead.typeahead('destroy'); 

    if(is_remote){ 
     var remote_url = titles; 
     var titles = new Bloodhound({ 
     queryTokenizer: Bloodhound.tokenizers.whitespace, 
     datumTokenizer: Bloodhound.tokenizers.whitespace, 
      remote: { 
       url: remote_url, 
       q=%QUERY', 
       wildcard: '%QUERY' 
      } 
     }); 
    } 
    else{ 
     var titles0 = titles; 
     var titles = new Bloodhound({ 
     queryTokenizer: Bloodhound.tokenizers.whitespace, 
     datumTokenizer: Bloodhound.tokenizers.whitespace, 
      local: titles0 
     });  
    } 

    titles.initialize(); 

    filters_typeahead.typeahead({ 
    highlight: true, 
    minLength: 2, 

    }, 
    { 
     name: 'titles', 
     displayKey: 'name', 
     source: titles, 
     templates: { 
     suggestion: function(data) { 
      return '<div>' + data.name + '</div>'; 
     } 
    } 
}); 

};

+0

Ich habe deine Frage falsch gelesen. Wechsel von Remote zu lokalen, nicht Remote-Quellen. Wenn Sie einen Grund haben, benutzen Sie nicht nur Remote oder lokal? Beide können mit einer Funktion zum Zurückgeben der Daten umgehen. – whipdancer

+0

Ich habe mehrere typeaheads, zwischen denen ich hin- und herwechsle. –

+0

Können Sie das etwas erweitern? Brauchst du Bluthund? Wenn Sie einfach Ihre Quelle für den Typehead als eine Funktion definieren können, dann können Sie damit umgehen, welche Daten (lokaler JSON, AJAX-Aufruf usw.) über diese Funktion erhalten. – whipdancer

Antwort

1

Meine Antwort ist ein wenig komplizierter als deins, aber hoffentlich wird es Sie in die richtige Richtung weisen. Wenn Sie eine remote Quelle unter Verwendung von bloodhound ändern möchten, müssen Sie das Bluthundobjekt löschen und neu initialisieren.

Hier Ich schaffe eine eine Bluthund Instanz initialisiert:

var taSource = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('Value'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    identify: function(obj) { 
    return obj.Value; 
    }, 
    remote: remoteSrc 
}); 

taSource.initialize(true); 

In der Logik zu schalten rufe ich sowohl clear() und initialize(true), vorbei gilt für die neu initialisieren Paramter:

taSource.clear(); 
taSource.initialize(true); 

I Wechsel Griff die URL in der prepare Methode, die als Teil des Objekts remote verfügbar ist.

Here is a full example zeigen, wie ich damit umgehe.