【问题标题】:Algolia autocomplete - only show if greater than X resultsAlgolia 自动完成 - 仅显示大于 X 的结果
【发布时间】:2017-02-05 12:08:07
【问题描述】:

我正在使用 Algolia 的 autocomplete.js(jQuery 版本)

当且仅当我正在搜索的 2 个数据源中的任何一个有超过 5 个结果时,我想在下拉列表的页脚中显示一些额外的文本

即“查看更多/所有结果”。我更愿意在“外部”页脚中显示这一点(即不是特定于一个来源的页脚)

在所有其他情况下(例如,两个数据源中都没有结果,或者两个数据源中都少于 5 个),我想隐藏此文本

我该怎么做?下面是我当前的代码

  var index_classes = client.initIndex('classes');
  var index_stories = client.initIndex('articles');

$('input[name="search_text"]').autocomplete(
                    { autoselect:true, debug:true,
                      templates: {
                          footer: '<span id="see-all-sr"><hr><a href="#" style="size:16px;padding-left:12px">See all results</a><br>&nbsp<span>'
                      }
                    }, [
                    {
                        source: $.fn.autocomplete.sources.hits(index_classes, { hitsPerPage: 5 }),
                        displayKey: 'name',
                        name: 'class',
                        templates: {
                            header: '<div class="aa-suggestions-category">Classes</div>',
                            suggestion: function(suggestion) {
                                return '<img src="/images/class/' + suggestion.id + '_100.jpg">' + '<div><span>' +
                                    suggestion._highlightResult.name.value + '</span><span>'
                                    + suggestion._highlightResult.teacher_name.value + '</span>';
                            },
                            empty: '<div class="aa-empty">No results. See <a href="/classes">all classes</a></div>',
                        }
                    },
                        {
                            source: $.fn.autocomplete.sources.hits(index_stories, { hitsPerPage: 5 }),
                            displayKey: 'title',
                            name: 'story',
                            templates: {
                                header: '<div class="aa-suggestions-category">Stories</div>',
                                suggestion: function(suggestion) {
                                    return '<img src="/images/article/' + suggestion.id + '_100.jpg">' + '<div><span>' +
                                        suggestion._highlightResult.title.value + '</span><span>' +
                                        suggestion._highlightResult.author_name.value + '</span></div>';
                                },
                                empty: '<div class="aa-empty">No results. See <a href="/stories">all stories</a></div>',
                            }
                        }

                ]).on('autocomplete:empty', function() {
                    document.getElementById('see-all-sr').style.display = "none";
                });

【问题讨论】:

    标签: javascript jquery typeahead.js algolia twitter-typeahead


    【解决方案1】:

    不幸的是,autocomplete.js 的数据集/源是独立的和异步的……因此,这样的页脚条件并不是真正可以实现的:/

    这需要更深入的重写。

    【讨论】:

    • 谢谢。使用并行查询来获取命中数,见下文。但是'c'是未定义的。你能帮我吗? var client = algoliasearch(...); var in = client.initIndex('c'); $('#search').change(function(){ var st = $(this).val(); in.search(st, function searchDone(err, content) { if (err) { c = 0; } else { c = content.nbHits; } }); alert(c);
    • 请记住,回调将被异步调用。您不能使用此类代码来显示/提醒值 -> 您需要使其更符合 JavaScript。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多