如何使用把手/胡子和bootstrap typeahead来渲染项目

时间:2012-08-25 08:00:51

标签: javascript backbone.js autocomplete twitter-bootstrap mustache

我想自定义使用把手模板由bootstrap-typeahead呈现的项目。 查看代码似乎默认项为<li><a href="#"></a></li>

我们假设我想使用把手模板来渲染我的项目。

我认为我应该以这种方式重新定义渲染功能(1)。

我的问题是:
应该如何使用(1)与bootstrap-typeahead.js v2.1.0`?

以下是(2)关于我传递给$.fn.typeahead和(3)我的把手/胡子模板的选项的代码。


(1)

var renderItem = function (ul, user) {
    // user is the Backbone.Model
    return $('<li></li>')
        .data('item.autocomplete', user)
        .append(autocompleteItemTemplate(user.toJSON()))
        .appendTo(ul);
};

(2)

element.typeahead({
    minLength: 3,
    source: function () {
        var users = app.userCollection;

        users = _.map(users, function (user) {
            return user.get('first_name') + ' ' + user.get('last_name');
        });
        return users;
    }
});

(3)

<a>{{ first_name }} {{ last_name}}</a>

1 个答案:

答案 0 :(得分:2)

您可以像这样覆盖渲染方法:

element.data( "typeahead" ).render = function ( items ) {
    var that = this;

    that.$menu.empty();
    items = $( items ).map(function (i, item) {
        i = renderItem( that.$menu, item ).attr( "data-value", item );
        i.find( "a" ).html( that.highlighter(item) );
        return i[0];
    });

    items.first().addClass( "active" );
    return this;
};

但是,由于Typeahead的source属性必须始终是字符串数组或返回字符串数组的函数,因此在renderItem函数中user参数将为string,因此我认为您将无法使用Handlebars。