我一直在使用Typeahead 0.9.3和Hogan 2一段时间,而且设置非常简单。
在0.9.3我做了类似的事情:
$('input.search-query').typeahead([
{
name: "pages"
,local: localSuggestions
,template: '<div class="tt-suggest-page">{{value}}</div>'
,engine: Hogan
}
]);
根据Migration Guide to 0.10&#34;预编译的模板现在是必需的&#34;,所以在0.10.3我尝试:
$('input.search-query').typeahead(null, {
name: "pages"
,source: taSourceLocal.ttAdapter()
,templates: {
suggestion: Hogan.compile('<div class="tt-suggest-page">{{value}}</div>')
}
});
但它不起作用。我收到错误:Uncaught TypeError: object is not a function
如果有另一个极简主义的模板引擎可以工作,我也会考虑它,但它必须很小。我不想添加像Handlebars这样的大文件或像Underscore这样的整个库。
任何想法? TIA!
答案 0 :(得分:9)
正如Jake Harding所说,the solution for modern browsers是这样的:
var compiledTemplate = Hogan.compile('<div class="tt-suggest-page">{{value}}</div>');
$('input.search-query').typeahead(null, {
// ...
templates: {
suggestion: compiledTemplate.render.bind(compiledTemplate);
}
});
不幸的是,Function.prototype.bind() is not supported by IE < 9,所以如果您需要支持无效的旧浏览器。
好消息是as stated by Steve Pavarno您不再需要模板引擎了。您可以通过传递如下函数来实现所需的结果:
// ...
templates: {
suggestion: function(data) { // data is an object as returned by suggestion engine
return '<div class="tt-suggest-page">' + data.value + '</div>';
};
}