【问题标题】:typeahead.js: Return all Bloodhound records on empty querytypeahead.js:返回空查询的所有 Bloodhound 记录
【发布时间】: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]:stackoverflow.com/a/27145346/4799064

标签: javascript typeahead.js bootstrap-typeahead


【解决方案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()

答案灵感来自:

【讨论】:

    【解决方案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;它可能适用于任何其他版本,也可能不适用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多