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 记录的主要内容,如果未能解决你的问题,请参考以下文章

typeahead.js 不返回所有结果

Bootstrap 3 typeahead.js - 通过 typeahead val 的一部分进行查询

如何使用最新的 typeahead.js 库呈现 JSON 响应

Twitter typeahead .js 文件未更新

Twitter Typeahead.js:单击/聚焦时显示所有选项

typeahead.js 获取选定的数据