当源是来自 Django 的字典时,Typeahead Bloodhound 自动完成使用预取 + 远程
Typeahead Bloodhound Autocomplete using prefetch + remote when source is a dict from Django
Bloodhound variable for Typeahead 效果很好:
var egDjangoVar = new Bloodhound({
queryTokenizer: Bloodhound.tokenizers.whitespace,
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
remote: {
url: '/ajax/eg/%QUERY.json',
wildcard: '%QUERY',
filter: filterdata
}
});
我们添加了 dict 解析功能 filter: filterdata
因为 Django 要求 JSON 作为安全的 dict 发送:
function filterdata(data){
return $.map(data.results, function(results,index){
return results.value;
})
}
所有作品都很漂亮。我们现在想要 Prefetch functionality 并添加了:
prefetch: {
url: '/ajax/prefetch.json',
wildcard: '%QUERY',
filter: filterdata
},
这不起作用,尽管 '/ajax/prefetch.json'
提供预期的命令。我们认为这可能是由于 dataTokenizer
问题 discussed in this answer,但我们不明白为什么标记器在远程和预取源之间应该不同,并且建议的 datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.value)};
在添加时不起作用它作为 prefetch
.
的参数
我们发现本地存储中的__/ajax/prefetch.json__data
是用dict键匹配值保存的,如{"datums":{"Apple":"Apple","Banana":"Banana","Orange":"Orange"},"trie":{"i":[],"c":{}}}
,而直接查看的远程数据如{"results": [{"value": "Apple"}, {"value": "Banana"}, {"value": "Orange"}]}
。这是意外吗?
我是前端/JS 的新手,如果这是一个愚蠢的问题,请原谅我。我们做错了什么?
明白了:filter
函数应该 return results
而不是 results.value
.
display:'value'
也从 Typeahead 初始化中丢失(其中 Bloodhound 变量被赋予 source
)。
Bloodhound variable for Typeahead 效果很好:
var egDjangoVar = new Bloodhound({
queryTokenizer: Bloodhound.tokenizers.whitespace,
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
remote: {
url: '/ajax/eg/%QUERY.json',
wildcard: '%QUERY',
filter: filterdata
}
});
我们添加了 dict 解析功能 filter: filterdata
因为 Django 要求 JSON 作为安全的 dict 发送:
function filterdata(data){
return $.map(data.results, function(results,index){
return results.value;
})
}
所有作品都很漂亮。我们现在想要 Prefetch functionality 并添加了:
prefetch: {
url: '/ajax/prefetch.json',
wildcard: '%QUERY',
filter: filterdata
},
这不起作用,尽管 '/ajax/prefetch.json'
提供预期的命令。我们认为这可能是由于 dataTokenizer
问题 discussed in this answer,但我们不明白为什么标记器在远程和预取源之间应该不同,并且建议的 datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.value)};
在添加时不起作用它作为 prefetch
.
我们发现本地存储中的__/ajax/prefetch.json__data
是用dict键匹配值保存的,如{"datums":{"Apple":"Apple","Banana":"Banana","Orange":"Orange"},"trie":{"i":[],"c":{}}}
,而直接查看的远程数据如{"results": [{"value": "Apple"}, {"value": "Banana"}, {"value": "Orange"}]}
。这是意外吗?
我是前端/JS 的新手,如果这是一个愚蠢的问题,请原谅我。我们做错了什么?
明白了:filter
函数应该 return results
而不是 results.value
.
display:'value'
也从 Typeahead 初始化中丢失(其中 Bloodhound 变量被赋予 source
)。