2015-10-30 17 views
3

我在版本0.11.1中使用Twitter Typeahead。現在我試圖正確地遠程工作,但不知何故,我覺得我正在變得奇怪的行爲。Twitter Typeahead遠程沒有完成一些查詢

這是工作的代碼與本地陣列:

var localArray = [{"value":"test0"},{"value":"test1"},{"value":"test2"},{"value":"test3"},{"value":"test4"}]; 
var myds = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    local: localArray 
}); 
$(function() { 
    $("#my-input").typeahead({}, 
    { 
     name: 'ds1', 
     source: myds, 
     display: 'value' 
    }); 
}); 

現在,我嘗試建立遠程數據。我所做的只是將本地更改爲遠程,並提供URL並添加查詢參數。它將提供與localArray完全相同的結構和數據(它目前忽略查詢並總是提供localArray的內容來測試它)。我在Chrome開發者工具檢查實際執行查詢並返回localArray的內容:

var myds = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    remote: { 
     url: '/autocomplete?query=%QUERY', 
     wildcard: '%QUERY' 
    }  
}); 
$(function() { 
    $("#my-input").typeahead({}, 
    { 
     name: 'ds1', 
     source: myds, 
     display: 'value' 
    }); 
}); 

不知怎的,爲test搜索時,這是行不通的。當搜索tes時,我仍然得到結果,但是當我搜索test時,沒有提供自動完成結果。還有其他一些詞不適用,它似乎遵循相同的模式,就像找不到完整的單詞而找不到單詞的一部分。任何想法是什麼導致這種行爲或如何解決它?

我的猜測是遠程數據源必須是另一種格式,但我找不到它的外觀。在打開頁面上的所有示例看起來非常相似...

+0

您的遠程數據格式是什麼? –

+0

它是普通的json:''[{「value」:「test0」},{「value」:「test1」},{「value」:「test2」},{「value」:「test3」},{ 「value」:「test4」}]'' – Tim

+0

我想看看您是否遇到了typeahead的已知錯誤。你可以在你的鍵入設置中添加一個「limit:2」,看看其他搜索是否開始工作(當然只返回2個結果)? –

回答

3

您正在經歷前面的bug。當處理結果集時,它會引起奇怪的行爲,這些結果集與在typeahead中聲明的限制相同或小於默認限制(默認限制爲5)。不幸的是,主要的typeahead repo不再被維護,因此您將不得不使用PR來修復問題或自己編輯代碼。幸運的是,修復只是向下移動一行代碼。

無論是在編譯束或在src/typeahead/dataset.js找到的代碼塊,並將其改變爲:

function async(suggestions) { 
    suggestions = suggestions || []; 
    if (!canceled && rendered < that.limit) { 
     that.cancel = $.noop; 
     that._append(query, suggestions.slice(0, that.limit - rendered)); 
     rendered += suggestions.length; 
     that.async && that.trigger("asyncReceived", query); 
    } 
} 

所有這並低於that._append(query, suggestions.slice(0, that.limit - rendered));移動rendered += suggestions.length;;

這在this PR中舉例說明。