我在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;
}
}
});
});
答案 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