2016-03-30 11 views
0

考えられるすべての設定(たとえば.clear().typeahead('destroy'))で遊んだことがあります。ソースをリモートとして設定してしまえば先読みをローカルソースにする。Typeahead.js/Bloodhound.jsを使用してリモートソースとローカルソースを切り替える

どのような考えですか?ここで

は、以下のコードはonclick呼び出されます:

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

質問が間違っています。リモートソースではなく、リモートからローカルに切り替える。リモートまたはローカルのどちらかを使用しない理由があればどちらの関数でもデータを返す関数を扱うことができます。 – whipdancer

+0

私は複数の先読みを持っています。 –

+0

これ以上展開できますか? bloodhoundを使う必要がありますか?仮引数のソースを関数として定義するだけであれば、その関数を介してどのようなデータ(ローカルjson、ajax呼び出しなど)を取得することもできます。 – whipdancer

答えて

1

私の答えはあなたのものより少し複雑ですが、うまくいけば正しい方向にあなたを指し示すでしょう。

bloodhoundを使用してremoteソースを変更する場合は、bloodhoundオブジェクトをクリアして再初期化する必要があります。

ここで私は初期化ブラッドハウンドのインスタンス作成しています:

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

私は変更ハンドル:私は再初期化PARAMTERのためにtrueを渡す、clear()initialize(true)の両方を呼び出す切り替えるためのロジックで

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

remoteオブジェクトの一部として利用可能なprepareメソッドのURL。

prepare: function(query, settings) { 
    settings.url = urlRoot + '/' + whichType + '?q=' + query; 
    console.log(settings.url); 
    return settings; 
}, 

Here is a full example私がどのように処理するかを示します。

関連する問題