1

我正在使用 typeahead.js 0.11.1 并尝试对来自远程源的结果进行排序。根据代码应该有可能覆盖猎犬的默认排序功能。但是我的排序函数永远不会被调用。识别功能的计数相同。

这是我的代码:

    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()
                });

有没有人关于如何实现这一目标的任何提示?

4

2 回答 2

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()
                });
于 2015-05-07T08:41:39.563 回答
0

sorted由于某种原因,该函数也没有被我调用,多亏了René ,我才能让它工作。

var blood = new Bloodhound({
sorter: function(a, b) {
    var input_string = $(selector).val();
    distance = Levenshtein.get(a.name, input_string) - Levenshtein.get(b.name, input_string)
    return distance;
},
remote: {
    transform : function(response) {
        return blood.sorter(response)
    },
},
于 2018-06-22T16:36:57.117 回答