如何在typeahead/bloodhound中对搜索结果进行排序?

Ren*_*ann 1 javascript typeahead typeahead.js bloodhound

我正在使用typeahead.js 0.11.1并尝试对来自远程源的结果进行排序.根据代码,应该有可能覆盖bloodhound的默认排序功能.但我的调用函数从未调用过.识别功能的计数相同.

这是我的代码:

    var bloodhoundSearchEngine = new Bloodhound({
    // we do not need any tokenization cause this will be done on the server
    datumTokenizer : function(d) {
        return d;
    },
    queryTokenizer : function(q) {
        return q;
    },
    sorter : function(itemA, itemB) {
        console.log(itemA);
        if (itemA.count < itemB.count) {
            return -1;
        } else if (itemA.count > itemB.count) {
            return 1;
        } else
            return 0;
    },
    identify : function(item) {
        console.log(itemA);
        return item.value;
    },
    remote : {
        url : '/suggest/?term=%term',
        wildcard : '%term',
        transform : function(response) {
            return $.map(response.suggestItems, function(item) {
                return {
                    value : item.value,
                    count : item.count
                };
            });
        },
        rateLimitBy : 'debounce',
        rateLimitWait : 300
    }
});

$('#typeaheadinput .typeahead')
        .typeahead(
                {
                    hint : true,
                    highlight : true,
                    minLength : 1
                },
                {
                    name : 'existing-names',
                    display : 'value',
                    limit : 20,
                    source : bloodhoundSearchEngine.ttAdapter()
                });
Run Code Online (Sandbox Code Playgroud)

有没有人提示如何实现这一目标?

Ren*_*ann 5

未调用分拣机因为我使用自定义转换函数来转换来自远程服务器的建议.因此,我在转换函数中包含了对分拣机的调用.以下代码适用于我:

var bloodhoundSearchEngine = new Bloodhound({
    // we do not need any tokenization cause this will be done on the server
    datumTokenizer : function(d) {
        return d;
    },
    queryTokenizer : function(q) {
        return q;
    },
    sorter : function(itemA, itemB) {
        console.log(itemA);
        if (itemA.count < itemB.count) {
            return -1;
        } else if (itemA.count > itemB.count) {
            return 1;
        } else
            return 0;
    },
    identify : function(item) {
        console.log(itemA);
        return item.value;
    },
    remote : {
        url : '/suggest/?term=%term',
        wildcard : '%term',
        transform : function(response) {
            return $.map(bloodhoundSearchEngine.sorter(response.suggestItems), function(item) {
                return {
                    value : item.value,
                    count : item.count
                };
            });
        },
        rateLimitBy : 'debounce',
        rateLimitWait : 300
    }
});

$('#typeaheadinput .typeahead')
        .typeahead(
                {
                    hint : true,
                    highlight : true,
                    minLength : 1
                },
                {
                    name : 'existing-names',
                    display : 'value',
                    limit : 20,
                    source : bloodhoundSearchEngine.ttAdapter()
                });
Run Code Online (Sandbox Code Playgroud)