2016-03-30 67 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

我有多個typeahead,我可以切換。 –

+0

你可以擴展一下嗎?你需要使用獵犬嗎?如果你可以簡單地將你的源代碼定義爲函數,那麼你可以通過該函數處理獲取任何數據(本地json,ajax調用等)。 – whipdancer

回答

1

我的回答比你的要多一點,但希望它能指引你朝正確的方向發展。

當您想要使用bloodhound更改remote源時,必須清除獵物對象並重新初始化它。

在這裏,我創建初始化獵犬實例:

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

在邏輯切換我打電話都clear()initialize(true),傳遞真實的重新初始化放慢參數:

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

我處理不斷變化的prepare方法中的URL可用作remote對象的一部分。

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

Here is a full example顯示我如何處理它。

相關問題