如何在bootstrap 3 typeahead下拉列表中设置自定义html模板

时间:2014-09-03 18:41:12

标签: html twitter-bootstrap-3 typeahead

我写了以下代码:

      $('#pretraga').typeahead({
          hint: true,
          highlight: true,
          minLength: 2

      },
  {
      name: 'kategorije',
      displayKey: 'value',
      // `ttAdapter` wraps the suggestion engine in an adapter that
      // is compatible with the typeahead jQuery plugin
      source: kategorije.ttAdapter()

  });

是否有人提示如何为下拉列表设置自定义html模板?

提前谢谢

3 个答案:

答案 0 :(得分:12)

使用bootstrap-3-typeahead我认为你不能使用template属性。在这种情况下,最好使用荧光笔。例如:

$('#employees').typeahead({
                    highlighter: function (item) {
                        var parts = item.split('#'),
                            html = '<div class="typeahead">';
                        html += '<div class="pull-left margin-small">';
                        html += '<div class="text-left"><strong>' + parts[0] + '</strong></div>';
                        html += '<div class="text-left">' + parts[1] + '</div>';
                        html += '</div>';
                        html += '<div class="clearfix"></div>';
                        html += '</div>';
                        return html;
                    },
                    source: function (query, process) {

                        var employees = [];

                        return $.post('employee/search', { query: '%' + query + '%' }, function (data) {

                            // Loop through and push to the array
                            $.each(data, function (i, e) {
                                employees.push(e.name + "#" + e.number);
                            });


                            // Process the details
                            process(employees);
                        });

                    }
                }
                )

因此,您可以构建显示的html模板。

如果要保留突出显示功能,请使用此正则表达式

var name = parts[1].replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
                            return '<strong>' + match + '</strong>'
                        });

                        html += '<div class="text-left">' + name + '</div>';

答案 1 :(得分:1)

你可以尝试

 {
  name: 'kategorije',
  displayKey: 'value',
  // `ttAdapter` wraps the suggestion engine in an adapter that
  // is compatible with the typeahead jQuery plugin
  source: kategorije.ttAdapter(),
  template: /* html template here, {{name}} to use "data".name*/

})

答案 2 :(得分:0)

试试这样。此外,您需要将Handlebars.js(用于模板)添加到项目中。

$('#pretraga').typeahead({
    hint: true,
    highlight: true,
    minLength: 2
}, {
    name: 'kategorije',
    displayKey: 'value',
    source: kategorije.ttAdapter(),
    templates: {
        empty: [
            '<div class="empty-message">',
            '-',
            '</div>'
        ].join('\n'),
        suggestion: Handlebars.compile('<div class="row col-sm-12 col-lg-12 "><a>' +
            '<div><div class="pull-left row col-sm-12 col-lg-2">' +
            '<span>' +
            '<img src="{{picture.data.url}}">' +
            '</span></div>' +
            '<div class="col-sm-12 col-lg-10"><span>{{name}} - ({{category}}) - <small style="color:#777;">({{id}})</small>' +
            '</br><small style="color:#777;">({{location.street}} , {{location.city}} , {{location.country}})</small></span>' +
            '</div></div>' +
            '<div class="pull-right">' +
            '<span class="id"><b>{{likes}}</b></span><span> <strong>Likes</strong></span>' +
            '</div>' +
            '</a></div>')
    }
});