键入时Typeahead.js不会过滤结果

时间:2014-04-02 17:00:50

标签: javascript typeahead.js

我对typeahead.js

使用以下代码
var countries = new Bloodhound({
    datumTokenizer: function(d) {
        return Bloodhound.tokenizers.whitespace(d.en_name);
    },queryTokenizer: Bloodhound.tokenizers.whitespace,
    limit: 100,
    remote: {
        url: 'http://domain.com/json.php?action=countries',
    }
});

countries.initialize();

$('.lang').typeahead(null, {
    name: 'countries',
    displayKey: 'en_name',
    source: countries.ttAdapter()
});

json是:

[{"id":"1","cz_name":"\u010de\u0161tina","en_name":"Czech"},{"id":"2","cz_name":"angli\u010dtina","en_name":"English"},{"id":"3","cz_name":"n\u011bm\u010dina","en_name":"German"}]

当我开始输入任何内容时,即使是与任何所需结果都不匹配的内容,我也会得到所有建议。

当我使用时:

var countries = new Bloodhound({
        datumTokenizer: function(d) {
            return Bloodhound.tokenizers.whitespace(d.en_name);
        },queryTokenizer: Bloodhound.tokenizers.whitespace,
        limit: 100,
        local: [{"id":"1","cz_name":"\u010de\u0161tina","en_name":"Czech"},{"id":"2","cz_name":"angli\u010dtina","en_name":"English"},{"id":"3","cz_name":"n\u011bm\u010dina","en_name":"German"}]
    });

它运作得很好。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我在这里找到了答案:https://github.com/twitter/typeahead.js/issues/248

  

在对此进行更多思考之后,我意识到必须负责远程api才能返回已过滤的结果,而不是返回结果。由于我使用的是静态json数据源,因此每次使用预取时我的返回结果都是相同的。