2014-05-02 98 views
13

我使用血獵法來獲取一些數據,我尋血獵犬對象:typeahead.js:返回空查詢中的所有血獵記錄

var lastAdresses = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    prefetch: { 
    url: '/_dev_data_sources/last_adresses_json.html', 
    }, 
    limit: 20 
}); 



lastAdresses.initialize().done(function() { 
    var query = "L"; 
    lastAdresses.get(query, function(suggestions) { 
    console.log(suggestions); 
    }); 
}); 

這工作得很好,當我的查詢是「L」狀的例子,或另一個字符串。但是當我的查詢是「」的時候,我想讓獵犬返回所有可用的記錄。在我的例子中,它什麼都不返回。

我看到了,這個獵犬有一個過濾器的參數,但我不知道如何使用它。

有人可以幫我嗎?

+0

你想預輸入儘快在頁面加載顯示所有建議? –

+0

是的,這是我的意圖。我看到打字團隊正在努力,但我無法等待。現在它通過添加一個觀察器函數作爲源來檢查查詢是否爲「」,並且它是否如此,它將所有數據作爲數組返回。 – user1383029

+1

你可以把代碼發佈到某個地方來展示它嗎?我也需要顯示所有記錄...謝謝=) – gobwas

回答

1

Bloodhound使用名爲SearchIndex的內部類型來高效地匹配查詢條件。

您可以monkey patchSearchIndex.get更改爲給定查詢返回的記錄。

此功能補丁警犬實例返回所有記錄的一個空的查詢詞:

// Patch the given Bloodhound instance 
// to match all records for an empty query 
function enableMatchAll(bloodhound) { 
    var _get = bloodhound.index.get; 
    bloodhound.index.get = function(query) { 
    if(!query || query === '') { 
     return this.datums; 
    } else { 
     return _get.call(this, query); 
    } 
    } 
} 

JSBin demo

要知道,這個補丁使用無證內部功能。它適用於typeahead/bloodhound v0.10.5;它可能或可能不適用於任何其他版本。

6

我認爲可能有更好的方法來做到這一點。但它仍然取決於可能會改變的內部獵犬實施。

var searchEngine = new Bloodhound({...}); 
function searchWithDefaults(q, sync) { 
    if (q === '') { 
    sync(searchEngine.index.all()); 
    } else { 
    searchEngine.search(q, sync); 
    } 
} 
$("#typeahead").typeahead({ 
    minLength : 0, 
}, { 
    name : 'typeahead', 
    source : searchWithDefaults 
}); 

該代碼將實現Bloodbound站內搜索引擎的優勢,被稱爲SearchIndex,其功能all()返回由警犬存儲的數據的完整列表。

回答啓發:

相關問題