我bootstrap's typeahead
用来从数据库中获取“家人的名字”。我已阅读文档,我认为一切正常。但是,当我开始搜索时,我意识到“搜索”太慢了,我认为这是因为“预输入”会在我每次按键时发送请求。
如何在填充文本框后停止发送许多请求或尝试发送整个字符串?
也许这些信息会有所帮助
这是视图:
这是开发人员工具的视图:
这是JS:
我使用回调来发送请求:
var familias = {};
var familiaLabels = [];
//Callback for searching the string
var buscarFamilia = _.debounce(function( query, process ){
$.getJSON( '{/literal}{$smarty.const.FAMILIARES_FE_ROOT}{literal}/ws/familia-ajax/', { q: query }, function ( data ) {
//Clean containers
familias = {};
familiaLabels = [];
//Using some underscore.js for getting data from each item
_.each( data, function( item, ix, list ){
//Fill with the name of each item
familiaLabels.push( item.nombre );
//Fill data for the template
familias[ item.nombre ] = {
id:item.id,
nombre:item.nombre,
padre:item.padre,
madre:item.madre
};
});
//Return the array
process( familiaLabels );
},800);
});
这是“typeahead”的配置:
$('#alu_familia').typeahead({
source: function ( query, process ) {
buscarFamilia ( query, process )
}
, updater: function (itemSelected) {
//This is for getting the id
$( "#alu_fami_id" ).val( familias[ itemSelected].id );
return itemSelected;
}
,
minLength:2,
matcher: function () { return true; }
,highlighter: function(item){
var p = familias[ item ];
var itm = ''
+ "<div class='typeahead_wrapper'>"
+ "<div class='typeahead_labels'>"
+ "<div class='typeahead_primary'>" + p.nombre + "</div>"
+ "<div class='typeahead_secondary'><b>Padre: </b>" + p.padre +"</div>"
+ "<div class='typeahead_secondary'><b>Madre: </b>"+p.madre+ "</div>"
+ "</div>"
+ "</div>";
return itm;
}
});
提前致谢。