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

Posted

技术标签:

【中文标题】Typeahead 在建议末尾添加自定义行【英文标题】:Typeahead add a custom line to end of suggestions 【发布时间】:2014-06-26 21:29:54 【问题描述】:

是否有可能在所有建议的末尾添加自定义行?我想添加一个“显示更多建议”,它是指向另一个页面的链接。

$(function()

var countries = new Bloodhound(
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  prefetch: 
    url : '/json/temp/countries.json',
    filter: function(list) 
      return $.map(list, function(country)  return  name: country ; );
    
  ,
);

countries.initialize();

$('.component-search-button .ui-input input').typeahead(null, 

   highlight: true,
   name: 'countries',
   displayKey: 'name',
   source: countries.ttAdapter(),
   templates: 
     empty: [
       '<div class="empty-message">',
          '<i>Unfortunatelly we coud not find items that match the current query. Please    try again.</i>',
       '</div>'
     ].join('\n'),
     suggestion: Handlebars.compile('<p><strong>name</strong></p>')
   
 
);


);

它遵循 Git 上的基本示例。我看到错误消息在“模板”中的“空”处触发,它有一个选项可以在列表完成或类似的情况下触发。

非常感谢您的帮助。

【问题讨论】:

请添加您自己的答案作为答案并接受。 是的,它有帮助,谢谢 :) 我要使用'footer' ???? 我建议你编辑你的帖子,从问题中删除你的答案,然后回答你自己的问题,这样它就不会被标记为未回答。 【参考方案1】:

好的,我找到了自己的答案。来自Typeahead API:

可以使用以下选项配置数据集。

source – 建议的支持数据源。预计是一个带有签名的函数 (query, cb)。预计该函数将计算用于查询的建议集(即 javascript 对象数组),然后使用所述集调用 cb。 cb 可以同步或异步调用。可以在此处使用 Bloodhound 建议引擎,要了解如何使用,请参阅 Bloodhound 集成。必填。

name – 数据集的名称。这将附加到 tt-dataset- 以形成包含 DOM 元素的类名。只能由下划线、破折号、字母 (a-z) 和数字组成。默认为随机数。

displayKey – 对于给定的建议对象,确定它的字符串表示形式。这将在选择建议后设置输入控件的值时使用。可以是键字符串或将建议对象转换为字符串的函数。默认为值。

templates – 渲染数据集时使用的模板哈希。请注意,预编译的模板是一个将 JavaScript 对象作为其第一个参数并返回 html 字符串的函数。

empty – 当给定查询有 0 个建议可用时呈现。可以是 HTML 字符串或预编译模板。如果是预编译模板,则传入的上下文将包含查询。

footer——呈现在数据集的底部。可以是 HTML 字符串或预编译模板。如果是预编译模板,则传入的上下文将包含 query 和 isEmpty。

header – 呈现在数据集的顶部。可以是 HTML 字符串或预编译模板。如果是预编译模板,则传入的上下文将包含 query 和 isEmpty。

suggestion – 用于呈现单个建议。如果设置,这必须是一个预编译的模板。关联的建议对象将用作上下文。默认为包含在 p 标签中的 displayKey 的值,即

所以必须做的是:

templates: 
 empty: [
    '<div class="empty-message">',
      '<i>Unfortunatelly we coud not find items that match the current query. Please try again.</i>',
    '</div>'
  ].join('\n'),
  footer : [
    '<div class="more-results">',
      '<a href="#">More Results</a>',
    '<div>'
  ].join('\n'),
  suggestion: Handlebars.compile('<p>name</p>')

希望这对某人有帮助:)

【讨论】:

我知道这太旧了,但是你是如何用 jquery 选择那个 div 的? $('.empty-message').click(function() ... );不工作 因为它是动态添加的(dom 已更新),您必须根据您的 jquery 版本使用 on/live 方法将事件放在主体上,以便在 dom 更新时绑定事件

以上是关于Typeahead 在建议末尾添加自定义行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MS Access 中向 SQL 查询添加自定义行?

ios UITableView 与 fetchedresultscontroller - 添加自定义行

将自定义行添加到JavaFX LineChart

drupal 7 使用模块视图自定义行样式

如何从 PrepareForReuse 的 UITableView 自定义行中删除视图?

iOS UILabel自定义行间距时获取高度