typeahead.js:返回空查询的所有 Bloodhound 记录
Posted
技术标签:
【中文标题】typeahead.js:返回空查询的所有 Bloodhound 记录【英文标题】:typeahead.js: Return all Bloodhound records on empty query 【发布时间】:2014-06-19 05:49:50 【问题描述】:我使用 Bloodhound 来获取一些数据用于预先输入。我的猎犬对象:
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 返回所有可用的记录。在我的示例中,它什么也不返回。
我看到了,那个猎犬有一个过滤器参数,但我不知道如何使用它。
谁能帮帮我?
【问题讨论】:
您希望在页面加载后立即显示所有建议? 是的,这是我的意图。我看到预输入团队正在努力,但我等不及了。现在它通过添加一个观察者函数作为源来工作,该函数检查查询是否为“”,如果是,它将所有数据作为数组返回。 你能把代码贴在某个地方来显示这个吗?我还需要显示所有记录...谢谢 =) 我也觉得这很有用。有什么解决办法吗? 我找到了一个类似问题的答案。试试这个链接。 [使用 typeahead 和 Bloodhound 显示点击建议的完整列表][1] [1]:***.com/a/27145346/4799064 【参考方案1】:我认为可能有更好的方法来做到这一点。但这仍然取决于可能会改变的内部猎犬实现。
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
);
此代码利用了名为 SearchIndex
的 Bloodbound 内部搜索引擎的实现及其返回 Bloodhound 存储的完整数据列表的函数 all()
。
答案灵感来自:
Twitters Typeahed example with default suggestions 乔伊斯回答【讨论】:
【参考方案2】:Bloodhound 使用名为SearchIndex
的内部类型来高效匹配查询词。
您可以monkey patchSearchIndex.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);
JSBin demo
请注意,此补丁使用未记录的内部功能。它适用于 typeahead/bloodhound v0.10.5;它可能适用于任何其他版本,也可能不适用。
【讨论】:
以上是关于typeahead.js:返回空查询的所有 Bloodhound 记录的主要内容,如果未能解决你的问题,请参考以下文章
Bootstrap 3 typeahead.js - 通过 typeahead val 的一部分进行查询
如何使用最新的 typeahead.js 库呈现 JSON 响应