Typeahead/Bloodhound - 结果数

Typeahead/Bloodhound - number of results

我一直在为一个项目使用 typeahead 和 bloodhound,我发现它真的不直观而且令人沮丧。本应花一秒钟时间完成的事情,却在一个小时的研究中结束。

无论如何,我正在尝试将结果数量提醒到我的猎犬中。

到目前为止,这是我的代码

 var pisList = new Bloodhound({
                datumTokenizer: Bloodhound.tokenizers.whitespace,
                queryTokenizer: Bloodhound.tokenizers.whitespace,
                prefetch: {
                    url: "../Helper/LookUpPIs?list=" + $list,
                    cache: false
                }
            });

            alert(pisList.length);

            //Typeahead on project numbers
            $('.pis').typeahead({
                hint: true,
                higlight: true,
                minLength: 1
            },
                {
                    name: 'pis',
                    source: pisList
                });

            //Display project details distribution panel
            $('input.pis').on('typeahead:selected', function (event, selection) {
                var result = selection.match(/\((.*)\)/);
                getPiInformation(result[1]);
            });
            return false;
        }

现在我的警报 return 我未定义。我尝试了多种变体,但 none 成功了。

如果您有任何提示,请告诉我并提前致谢。

这是一种愚蠢的方法,但它确实有效。我必须创建一个隐藏字段,遍历 datumtokenizer 中的每个结果并增加值。

var pisList = new Bloodhound({
                //datumTokenizer: Bloodhound.tokenizers.whitespace,
                datumTokenizer: function (d) {
                    //count number of PIS found and put their ID in the field
                    $('#numberofPIs').val(Number($('#numberofPIs').val()) + Number(1));
                    return tokens;
                },
                queryTokenizer: Bloodhound.tokenizers.whitespace,
                prefetch: {
                    url: "../Helper/LookUpPIs?list=" + $list,
                    cache: false
                }
            });

可能不是最好和最干净的方法,但它有效

alert(

    Object.keys(pisList.index.datums).length 

);