首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用“remote”时,Typeahead和Bloodhound显示无关的建议。

当使用“remote”时,Typeahead和Bloodhound显示无关的建议。
EN

Stack Overflow用户
提问于 2015-01-29 19:23:55
回答 2查看 1.4K关注 0票数 4

当使用带有remote选项的Type预报/血犬时,当本地/预取结果在“限制”(5)下时,所显示的建议与输入无关。看起来就像它只是显示从顶部的结果设置为5。

照片:“爱”是预期的结果,其他一切都是无关的:

我的代码:

代码语言:javascript
复制
    var keywords = [
 {"value": "Ambient"}, {"value": "Blues"},{"value":  "Cinematic"},{"value":  "Classical"},{"value": "Country"},
 {"value": "Electronic"},{"value": "Holiday"},{"value": "Jazz"},{"value": "Lounge"},{"value": "Folk"},
  {"value": "Hip Hop"},{"value": "Indie"},{"value": "Pop"},{"value": "Post Rock"},{"value": "Rock"},{"value": "Singer-Songwriter"},{"value": "Soul"},
  {"value": "World"},{"value": "Happy"},{"value": "Sad"},{"value": "Love"},{"value": "Angry"},
  {"value":"Joy"},{"value": "Delight"},{"value": "Light"},{"value": "Dark"},{"value": "Religious"},{"value": "Driving"},
  {"value":"Excited"},{"value": "Yummy"},{"value": "Delicious"},{"value": "Fun"},{"value": "Rage"},
  {"value":"Hard"},{"value": "Soft"}
  ];


// Instantiate the Bloodhound suggestion engine
var keywordsEngine = new Bloodhound({
    datumTokenizer: function (datum) {
        return Bloodhound.tokenizers.whitespace(datum.value);
    },
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    local: keywords,
    remote: {
        url: '/stub/keywords.json',
        filter: function (keywords) {
            // Map the remote source JSON array to a JavaScript object array
            return $.map(keywords, function (keyword) {
                return {
                    value: keyword.value
                };
            });
        }
    },
    prefetch: {
        url: '/stub/keywords.json',
        filter: function (keywords) {
            // Map the remote source JSON array to a JavaScript object array
            return $.map(keywords, function (keyword) {
                return {
                    value: keyword.value
                };
            });
        }
    }
});

// kicks off the loading/processing of `local` and `prefetch`
keywordsEngine.initialize();

$('#keyword-search-input').typeahead({
  hint: true,
  highlight: true,
  minLength: 1
},
{
  name: 'keyword',
  displayKey: 'value',
  // `ttAdapter` wraps the suggestion engine in an adapter that
  // is compatible with the typeahead jQuery plugin
  source: keywordsEngine.ttAdapter()
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-03 16:38:06

经过进一步的研究,我认为我需要手动过滤远程建议,根据这个关于Typeahead.js的Github问题的帖子:

“所以我的想法是,遥控器返回的数据应该已经被遥控器过滤了,所以不再对其进行进一步的过滤。”

https://github.com/twitter/typeahead.js/issues/148

票数 2
EN

Stack Overflow用户

发布于 2015-04-24 04:21:19

我希望更深入地探讨这个问题,供今后参考。请记住,我不是JavaScript专家,也不是这方面的任何专家。对于Bloodhound引擎,它不允许与remote url的搜索参数进行持续的动态交互。正因为如此,如果您使用的是某个json文件,“提前输入”搜索框将只显示limit。因此,如果是limit: 10,那么将显示json数据的前10条记录,尽管用户输入,结果不会改变。只有json的第一条记录才有基于用户提示的建议,这是微不足道的。

但是,如果remote源有一个获取所需结果as in this examplequery(例如fire查询),那么每次填充搜索框时,搜索框中都会填充相关的结果。

那么,如果您有一个大的json文件,它是从某个数据库生成的,而不是使用prefecth呢?显然,为了速度和效率,您需要使用remote。使用php脚本,您需要执行如下操作:

代码语言:javascript
复制
$key=$_GET['key'];
$con=mysqli_connect("localhost","root","");
$db=mysqli_select_db($con, "database_name");
$query=mysqli_query($con, "SELECT * FROM table WHERE column LIKE '%{$key}%'");
$rows=array();
while($row=mysqli_fetch_assoc($query))
{
  $rows[] = $row; 
}
echo json_encode($rows);        

在这里,您使用GET获取搜索参数的值,并且您已经与数据库建立了连接,因此您的搜索池将始终在用户提示下使用“相关结果”进行补充。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28222914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档