我正在使用Typeahead在Symfony2中为我的应用构建自动完成功能。当文本输入到文本区域时,会返回建议,但它们都显示为"未定义"。
JSON输出如下:
[{"name":"Test"},{"name":"Something"},{"name":"Another thing"},{"name":"Time"}]
我的HTML& JQuery是这样的:
<h1>Ajax Test</h1>
<div id="prefetch">
<input class="typeahead" type="text" placeholder="Countries">
</div>
<script>
var countries = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 10,
prefetch: {
url: 'http://localhost/centredb/web/app_dev.php/centre/dashboard/ajax/centres/',
filter: function(response){
return response.Name
}
}
});
// kicks off the loading/processing of `local` and `prefetch`
countries.initialize();
// passing in `null` for the `options` arguments will result in the default
// options being used
$('#prefetch .typeahead').typeahead(null, {
name: 'countries',
displayKey: 'name',
// `ttAdapter` wraps the suggestion engine in an adapter that
// is compatible with the typeahead jQuery plugin
source: countries.ttAdapter()
});
</script>
修改
看了很多例子后,JSON输出是正确的,所以我删除了对Symfony2的引用。这是使用JSON输出的Typeahead的严重问题。
答案 0 :(得分:0)
您需要更改过滤器功能,以便返回基准数组(即建议)。一个datum is a javascript object所以你需要使用过滤函数生成一个javascript对象数组。
你可以这样做:
filter: function (centres) {
return $.map(centres, function (centre) {
return {
name: centre.name
};
});
}
可以在这里找到类似的例子: