Twitter Typeahead.js 0.10.0现在使用Bloodhound.js与服务器进行交互。
是否可以将其使用的模板引擎从把手更改为underscore.js'或knockout.js拳击'模板引擎?
答案 0 :(得分:17)
$('.example-twitter-oss .typeahead').typeahead(null, {
name: 'twitter-oss',
displayKey: 'name',
source: repos.ttAdapter(),
templates: {
suggestion: Handlebars.compile([
'<p class="repo-language">{{language}}</p>',
'<p class="repo-name">{{name}}</p>',
'<p class="repo-description">{{description}}</p>'
].join(''))
}
});
上面的代码使用了Handlebars。但是您可以使用任何支持编译功能的模板引擎。 编译函数获取用户模板并根据需要对其进行处理以获取需要呈现的HTML。如果你想使用下划线,可以扩展它以支持一个名为“compile”的函数并引用它。下面的代码说明了这一点。
;(function (_) {
'use strict';
_.compile = function (templ) {
var compiled = this.template(templ);
compiled.render = function (ctx) {
return this(ctx);
}
return compiled;
}
})(window._);
我是从 Alan Greenblatt 那里得到的。链接是:http://blattchat.com/2013/06/04/twitter-bootstrap-typeahead-js-with-underscore-js-tutorial。他的推特类型的例子是过时的,因为他们是为twitter类型0.9.3缺乏bloodhound.js。但是,它确实为下划线模板引擎提供了一个很好的编译功能。
现在,使用下划线模板,代码如下所示:
$('.example-twitter-oss .typeahead').typeahead(null, {
name: 'twitter-oss',
displayKey: 'name',
source: repos.ttAdapter(),
templates: {
suggestion: _.compile([
'<p class="repo-language"><%=language%></p>',
'<p class="repo-name"><%=name%></p>',
'<p class="repo-description"><%=description%></p>'
].join(''))
}
});
答案 1 :(得分:11)
好消息是,如Steve Pavarno所述,您不再需要模板引擎了。您可以通过传递如下函数来实现所需的结果:
// ...
templates: {
suggestion: function(data) { // data is an object as returned by suggestion engine
return '<div class="tt-suggest-page">' + data.value + '</div>';
};
}