twitter typeahead ajax结果并未全部显示

时间:2015-06-12 08:41:02

标签: ajax json twitter typeahead.js

我正在使用带有ajax调用的twitter typeahead(typeahead.js 0.11.1)插件,但是当ajax结果的数量小于限制时,会给出一些奇怪的行为(默认限制是5,我没有& #9;在预先打电话中指定)。以下是我如何设置它:

var limit = 6;

populate_typeahead = function() {
    $('.typeahead').typeahead('destroy');
    $('.typeahead').typeahead({
      hint: true,
      highlight: true,
      minLength: 1
    },
    {
      source: ajaxquery,
    });
};

var ajaxquery = function(query, syncresults, process) {
        return $.ajax({
            url: $(this)[0].$el.closest('span.twitter-typeahead').find('input:last').data('mahiFindByPath'),
            type: 'get',
            data: {search_string: query, limit: limit},
            dataType: 'json',
            success: function(json) {
                return typeof json.options == 'undefined' ? false : process(json.options);
            }
        });
    };

导致我出现此问题的实际示例是键入" new to"在输入框中返回以下json.options:

[
    'new to add to g1',
    'new to be in grp1 then remove from grp',
    'new to drag',
    'new to assign'
]

但是,当所有4个应该显示时,出现的唯一建议是添加到g1'的新功能。如果我继续输入新的d'然后是新的拖动'建议出现了。如果我只键入' new'然后我得到了完整的5个建议,包括上面的大部分内容!

如果我更改var limit = 5;,那么ajax通话只返回最多5个结果,并且建议列表根本没有显示,直到我得到d'即新的'没有提出建议。这让我觉得它与ajax结果的数量小于或等于typeahead限制有关。为了测试我的理论,我将5个无意义的项目推送到json.options数组中,因此总是有超过5个结果并且它们都按预期工作 - 只是我不想在列表底部总是有无意义的建议。任何建议都非常感谢!

2 个答案:

答案 0 :(得分:24)

我有类似的问题。它看起来像是Typeahead版本0.11.1中的一个错误。试试这里的解决方案: https://github.com/twitter/typeahead.js/pull/1212 看看是否有效。

具体的变化如下: https://github.com/per-nilsson/typeahead.js/commit/387290b1e70be0052c6dd9be84069f55d54a7ce7

答案 1 :(得分:0)

遵循agustaf的建议。我正在使用 twitter-typeahead-rails gem 。我创建了一个fork并将版本提升到1.0.1,它为我修复了这个错误,可能是相同或相关的。

在我的情况下,我有两个来自远程源的结果,但只有两个用于建议。

我做了拉取请求 - 但不确定它是否会合并。但是对于未来的rails用户可能会看到这个使用我的fork,特别是我所说的分支。

添加到 gemfile

gem 'twitter-typeahead-rails', :git => "git://github.com/pitops/twitter-typeahead-rails.git" , :branch => "bump_version_to_1.0.1"