我正在使用TypeAhead为一个文本框提供自动补全结果。但似乎要么是猎犬,要么是TypeAhead只在我提供的JSON数组中搜索到的第一个单词。
JSON如下所示:
[
{
"name": "ALICE",
"value": "ALICE",
"physical_address": "ERF 270 CNR. OF THOMPSON AND INTWANA STREET, ALICE",
"province": "PROVINCE",
"tokens": [
"ALICE",
"PROVINCE",
"ERF",
"270",
"CNR.",
"OF",
"THOMPSON",
"AND",
"INTWANA",
"STREET",
"ALICE"
]
},
{
"name": "BUTTERWORTH",
"value": "BUTTERWORTH",
"physical_address": "SHOP NO. 1 MASONIC SHOPPING COMP, COR HIGH & BELL STREET BUTTERWORTH 4960",
"province": "PROVINCE",
"tokens": [
"BUTTERWORTH",
"PROVINCE",
"SHOP",
"NO.",
"1",
"MASONIC",
"SHOPPING",
"COMP",
"COR",
"HIGH",
"&",
"BELL",
"STREET",
"BUTTERWORTH",
"4960"
]
}
]我将TypeAhead初始化如下:
HTML:
<div class="films">
<input type="text" class="form-control typeahead" placeholder="Search" name="films" autocomplete="off" id="search">
</div>Javascript:
/* TypeAhead invoked */
var _prefetch_url = $root_path + '/media/mod_storelocator/stores_json.php';
// constructs the suggestion engine
var films = new Bloodhound({
datumTokenizer: function (d) {
return Bloodhound.tokenizers.whitespace(d.value);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 15,
prefetch: _prefetch_url
});
// kicks off the loading/processing of `local` and `prefetch`
films.initialize();
$('.films .typeahead').typeahead(null, {
displayKey : 'value',
source: films.ttAdapter(),
templates: {
suggestion: Handlebars.compile([
'<p class="repo-language">{{province}}</p>',
'<p class="repo-name">{{name}}</p>',
'<p class="repo-description">{{physical_address}}</p>'
].join(''))
}
});我真的很感谢任何人的帮助/建议。
发布于 2014-08-14 05:44:09
您将d.value传入datumTokenizer,所以它只使用数组中每个元素的值对象。
还要注意的是,猎犬对数据本身进行了标记,因此您不需要在JSON中传回单个标记(即您不需要tokens对象)。
因此,我将其更改为使用猎犬来标记化数组中每个元素组合的value和physical_address对象:
// constructs the suggestion engine
var films = new Bloodhound({
datumTokenizer: function(d) {
return Bloodhound.tokenizers.whitespace(d.name);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 15,
prefetch: {
url: _prefetch_url,
filter: function(list) {
return $.map(list,
function(element) {
return { name: element.value + " " + element.physical_address };
});
}
}
});我只能使用this fiddle在本地上下文中测试这一点,但是预取应该以相同的方式工作。
https://stackoverflow.com/questions/25291822
复制相似问题