2014-05-02 31 views
13

我使用血猎法来获取一些数据,我寻血猎犬对象:typeahead.js:返回空查询中的所有血猎记录

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”状的例子,或另一个字符串。但是当我的查询是“”的时候,我想让猎犬返回所有可用的记录。在我的例子中,它什么都不返回。

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

有人可以帮我吗?

+0

你想预输入尽快在页面加载显示所有建议? –

+0

是的,这是我的意图。我看到打字团队正在努力,但我无法等待。现在它通过添加一个观察器函数作为源来检查查询是否为“”,并且它是否如此,它将所有数据作为数组返回。 – user1383029

+1

你可以把代码发布到某个地方来展示它吗?我也需要显示所有记录...谢谢=) – gobwas

回答

1

Bloodhound使用名为SearchIndex的内部类型来高效地匹配查询条件。

您可以monkey patchSearchIndex.get更改为给定查询返回的记录。

此功能补丁警犬实例返回所有记录的一个空的查询词:

// 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;它可能或可能不适用于任何其他版本。

6

我认为可能有更好的方法来做到这一点。但它仍然取决于可能会改变的内部猎犬实施。

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

该代码将实现Bloodbound站内搜索引擎的优势,被称为SearchIndex,其功能all()返回由警犬存储的数据的完整列表。

回答启发:

相关问题