我使用猎犬获取一些预先输入的数据。我的猎犬对象:
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”或其他字符串时,这样可以正常工作。但是当我的查询是“”时,我希望bloodhound返回所有可用的记录。在我的例子中,它什么都不返回。
我看到,那个猎犬有一个过滤器参数,但我不知道如何使用它。
有人能帮助我吗?
答案 0 :(得分:8)
我认为可能有更好的方法。但它仍然取决于可能改变的内部猎犬实施。
all()
此代码利用名为SearchIndex
的Bloodbound内部搜索引擎及其函数<add key="DetailUrlFileExtensions" value=".html,.pdf,.htm" />
的实现,该函数返回Bloodhound存储的完整数据列表。
答案受到启发:
答案 1 :(得分:1)
Bloodhound使用名为SearchIndex
的内部类型来有效匹配查询字词。
您可以monkey patch SearchIndex.get
更改为给定查询返回的记录。
此函数修补Bloodhound实例以返回空查询词的所有记录:
// 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);
}
}
}
请注意,此修补程序使用未记录的内部功能。它适用于typeahead / bloodhound v0.10.5;它可能适用于任何其他版本,也可能不适用。