当查询不在displayField

时间:2016-05-17 17:55:23

标签: javascript twitter-bootstrap twitter-bootstrap-3 typeahead.js typeahead

我在Django应用程序上有一个Bootstrap-Ajax-Typeahead实现,用于搜索系统中的页面。我通过AJAX获得基于查询匹配搜索结果的页面,用户可以单击预先输入建议并转到相关页面。

但是,如果查询字符串不是displayField(title)的一部分,那么建议不会显示,但我可以看到它通过我的搜索机制返回。

例如,如果我搜索“电影”,我会通过搜索返回JSON对象,例如:

{
     title: "Movies",
     url: "/movies/",
     description: "Find a motion picture in your area"
}

我希望在说明属性中找到匹配项时仍向用户显示结果,但只有在匹配提示时才会显示Typeahead。

如何显示查询不在displayField中的搜索结果?

注意:我正在使用带有Bv3的typeahead-bootstrap。

$(document).ready(function ($) {
    var JSONSearchURL = "/search/";
    var searchBox = $('#search-form');
    searchBox.typeahead({
        onSelect: function (item) {
            window.location = item.value;
        },
        ajax: {
            url: JSONSearchURL,
            timeout: 800,
            displayField: "title",
            valueField: "url",
            method: "get",
            dataType: "JSON",
            preDispatch: function (query) {
                return {
                    q: query
                }
            },
            preProcess: function (data) {
                return data;
            }
        }
    });
});

1 个答案:

答案 0 :(得分:2)

默认情况下,bootstrap-ajax-typeahead使用displayField搜索匹配项。如果要覆盖此行为并搜索其他字段,则需要覆盖grepper事件。这样的事情应该有效(未经测试):

grepper: function(data){
    var that = this;
    if(data && data.length){
        items = $.grep(data, function(item){
            return that.matcher(item['description']);
        });
        return items;
    }
    return null;
}

请在此处查看grepper的默认实施:https://github.com/biggora/bootstrap-ajax-typeahead/blob/master/src/bootstrap-typeahead.js#L283