mei*_*ryo 7 templating-engine mustache hogan.js angularjs typeahead.js
嘿伙计们我正在使用twitter的typeahead.js,我想知道是否有可能修改hogan.js使用其他东西{{}}?
我现在正在查看缩小的代码,我不知道如何改变这么简单的东西.进行查找和替换会破坏它.
我问的主要是因为我使用的是Angular JS,但是twitter的typeahead需要一个模板引擎,导致hogan和angular的{{}}冲突.更好的解决方案是简单地修改Angular JS(我知道它不是模板引擎)并放弃Hogan以符合以下标准:
任何模板引擎都可以使用typeahead.js,只要它符合以下API:
// engine has a compile function that returns a compiled template
var compiledTemplate = ENGINE.compile(template);
// compiled template has a render function that returns the rendered template
// render function expects the context to be first argument passed to it
var html = compiledTemplate.render(context);
Run Code Online (Sandbox Code Playgroud)
fia*_*jaf 14
忽略这方面的文档,只需查看源代码:
function compileTemplate(template, engine, valueKey) {
var renderFn, compiledTemplate;
if (utils.isFunction(template)) {
renderFn = template;
} else if (utils.isString(template)) {
compiledTemplate = engine.compile(template);
renderFn = utils.bind(compiledTemplate.render, compiledTemplate);
} else {
renderFn = function(context) {
return "<p>" + context[valueKey] + "</p>";
};
}
return renderFn;
}
Run Code Online (Sandbox Code Playgroud)
碰巧你只需要传递一个函数template,可以使用一个context对象来调用,该对象包含你在实例化时在基准对象中传递的数据,所以:
$('#economists').typeahead({
name: 'economists',
local: [{
value: 'mises',
type: 'austrian economist',
name: 'Ludwig von Mises'
}, {
value: 'keynes',
type: 'keynesian economist',
name: 'John Maynard Keynes'
}],
template: function (context) {
return '<div>'+context.name+'<span>'+context.type.toUpperCase()+'</span></div>'
}
})
Run Code Online (Sandbox Code Playgroud)
如果您想将 Hogan.js 与 Angular 一起使用,您可以通过执行以下操作来更改分隔符:
var text = "my <%example%> template."
Hogan.compile(text, {delimiters: '<% %>'});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4061 次 |
| 最近记录: |