Typeahead 总是最多只显示 5 个建议

Posted

技术标签:

【中文标题】Typeahead 总是最多只显示 5 个建议【英文标题】:Typeahead always shows only 5 suggestions maximum 【发布时间】:2014-07-21 19:31:38 【问题描述】:

我有下面的代码使用 Typeahead.js 来获得建议。我的代码没有大问题,因为它工作正常。

我面临的小问题是,在任何给定时间,即使来自远程 URL 的建议超过 5 条,我也只能看到 5 条建议。

var isearch = new Bloodhound(
    datumTokenizer: function(d)  
         return Bloodhound.tokenizers.whitespace(d.value); 
    ,
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote: "http://localhost/search/get-data/%QUERY"
);

isearch.initialize();  

$("#search_box .typeahead").typeahead(null, name: "isearch",
    displayKey: "value",
    source: isearch.ttAdapter(),
    templates: 
         suggestion: Handlebars.compile("value")
    
);

我期望的是有更多的建议,应该有一个滚动条供用户查看。

【问题讨论】:

【参考方案1】:

在 Typeahead 0.11.1 版中:

在预输入对象的实例化期间指定“限制”以设置要显示的建议数量,例如

// Instantiate the Typeahead UI
$('.typeahead').typeahead(null, 
 limit: 10, // This controls the number of suggestions displayed
 displayKey: 'value',
 source: movies
);

在这里查看一个工作示例:

http://jsfiddle.net/Fresh/ps4w42t4/


在 Typeahead 版本 0.10.4 中。

Bloodhound 建议引擎的“限制”选项默认值为 5(即The max number of suggestions to return from Bloodhound#get)

您可以通过在实例化 Bloodhound 对象时指定所需值来增加限制。例如,要指定 10 的限制:

var isearch = new Bloodhound(
 datumTokenizer: function(d)  
     return Bloodhound.tokenizers.whitespace(d.value); 
 ,
 queryTokenizer: Bloodhound.tokenizers.whitespace,
 remote: "http://localhost/search/get-data/%QUERY",
 limit: 10
);

可以在此处找到限制设置为 10 的 Typeahead 实例的示例:

http://jsfiddle.net/Fresh/w03a28h9/

【讨论】:

感谢您的链接。我已经看到了。我想要的是当有更多项目时有一个滚动条。总限制 = 10 并且显示 = 5 项。对于剩余的项目,我们应该使用滚动条。 你所期望的不是 typeahead 实现的。我的回答将允许您增加计数,这是您目前实现这一目标的唯一方法。 好的,很高兴您找到了解决方案。您应该回答自己的问题,以帮助遇到同样问题的其他人。 @CJRamki 您可以获取远程数据集的大小,然后在实例化 Bloodhound 时使用此值。但是,您为什么要这样做,因为返回所有数据会降低页面速度,因为您需要检索所有数据? 版本 0.11.1 - limit 不是 BloodHound 的选项。 sufficient 是一个选项,但这是用于触发 remote 以回填建议。如果您使用 Bloodhound + TT,请在 TT 'dataset` 选项中使用 limit 来控制建议【参考方案2】:

在我的情况下,“限制”选项有效,但方式不同。我不得不在 typeahead 而不是 Bloodhound 上设置限制选项。我正在发布我的案例,以便对某人有所帮助。

bloodhoundSuggestionEngine = new Bloodhound(
datumTokenizer : function(d) 
return Bloodhound.tokenizers.whitespace(d.key);
,
queryTokenizer : Bloodhound.tokenizers.whitespace,
local : myOptions
);

$("#myinputbox").typeahead(
minLength : 3,
highlight : true
, 
displayKey : 'key',
source : bloodhoundSuggestionEngine.ttAdapter(),
limit: 10
);

【讨论】:

IIRC,从 Bloodhound 的 0.11 开始,限制作为选项被删除。我认为只是提前输入的一个选项 似乎他们一直在来回改变它【参考方案3】:

在 Typeahead 0.11.1 版中:

在预先输入对象的实例化过程中指定“限制”以设置要显示的建议数量,但请确保它比源返回的最大数量少一个

// Instantiate the Typeahead UI
$('.typeahead').typeahead(null, 
    limit: 9, // one less than your return value. This controls the number of suggestions displayed
    displayKey: 'value',
    source: movies
);

见https://github.com/twitter/typeahead.js/issues/1201

【讨论】:

第一个 null 是为我做的。谢谢!【参考方案4】:

除了按照@Fresh 的建议添加 Bloodhound 实例化的限制之外,我还在 CSS 中进行了以下样式设置以获得所需的结果。

.tt-suggestions 
  min-height: 300px;
  max-height: 400px;  
  overflow-y: auto;

我所做的是将容器强制为 400px,以便在有更多结果时获得滚动条。我想要这种方法是因为,我不希望屏幕占据更多区域。即使有 100 个结果,这也会起作用.. 并且不会阻塞屏幕。

【讨论】:

【参考方案5】:

另一种方法可能是直接更改 Typeahead 类中的默认值。

$.fn.typeahead.defaults = ... items: 8, ...

items: 'all'

【讨论】:

【参考方案6】:

@Atul 的回答肯定对我有帮助,但我遇到了另一个与寻血犬相关的问题。我正在使用遥控器,但我不会得到我知道遥控器会服务的结果。这是因为它在 Bloodhound 缓存中找到了足够接近的东西,并且没有向远程请求数据。因此,通过将 Bloodhound 上的 sufficient 选项从默认值提高到 100,它总是向遥控器询问更多数据。

【讨论】:

以上是关于Typeahead 总是最多只显示 5 个建议的主要内容,如果未能解决你的问题,请参考以下文章

vue-typeahead 说需要提供 HTTP 客户端

Facebook Api 最多只返回 25 个事件?

Youtube V3 - LiveChatMessages.list 最多只返回 75 个请求

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

parttion by ~~~针对某个字段或多个字段重复,数据只取前n条。问题例子:1.主评论下的评论按着 时间正序最多只取前5条 2.获取最新登录记录......

Typeahead 在建议末尾添加自定义行