typeahead.js:返回空查询的所有Bloodhound记录

时间:2014-05-02 13:55:39

标签: javascript typeahead.js bootstrap-typeahead

我使用猎犬获取一些预先输入的数据。我的猎犬对象:

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返回所有可用的记录。在我的例子中,它什么都不返回。

我看到,那个猎犬有一个过滤器参数,但我不知道如何使用它。

有人能帮助我吗?

2 个答案:

答案 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);
    }
  }
}

JSBin demo

请注意,此修补程序使用未记录的内部功能。它适用于typeahead / bloodhound v0.10.5;它可能适用于任何其他版本,也可能不适用。