让我们说一下,我有这个模板,我想用hogan.js进行渲染:
var template = '{{#numbers}}'
+ '{{#capitalize}}{{percentage}}{{/capitalize}} complete.\n'
+ '{{/numbers}}';
我用ff编译它:
var hello = hogan.compile(template);
var rendered = hello.render({
numbers: [
{ percentage: .3 },
{ percentage: .6 },
{ percentage: .8 }
],
capitalize: function() {
return function(num) {
// console.log(num);
return num * 100;
}
}
})
console.log(rendered)
如何将数字乘以100而不是NaN
?
NaN complete.
NaN complete.
NaN complete.
此外,当您取消注释上面的行时,num = {{percentage}}
而不是数字本身。
答案 0 :(得分:7)
基于@akonsu的回复,这是一个关于如何在Hogan.js中获取lambda值的示例。
我在示例中有两个辅助函数manual
和automatic
,它们可以根据所需的行为包装lambda函数定义。
var source = '{{#numbers}}'
+ 'test1 = {{#test1}}{{percentage}}{{/test1}}\n'
+ '{{/numbers}}'
+ '{{#numbers}}'
+ 'test2 = {{#test2}}{{percentage}}{{/test2}}\n'
+ '{{/numbers}}';
var template = Hogan.compile(source);
var renderer = function(context) {
return function(text) {
return template.c.compile(text, template.options).render(context);
};
};
var manual = function(lambda) {
return function(text) {
var render = renderer(this);
return lambda.call(this, text, render);
};
};
var automatic = function(lambda) {
return manual(function(text, render) {
return lambda.call(this, render(text));
});
};
var rendered = template.render({
numbers: [
{ percentage: .3 },
{ percentage: .6 },
{ percentage: .8 }
],
test1: manual(function(text, render) {
return render(text) * 100;
}),
test2: automatic(function(num) {
return num * 100;
})
});
console.log(rendered);
输出如下:
test1 = 30
test1 = 60
test1 = 80
test2 = 30
test2 = 60
test2 = 80
这是一个展示解决方案的jsfiddle:http://jsfiddle.net/potatosalad/h5cU4/2/
请注意,此解决方案不适用于partials(如果它们是从lambda部分引用的话)。
Hogan.js 2.0.0的相关代码是lambda replace section和higher order functions。
答案 1 :(得分:0)
我认为这个例子是相关的:https://github.com/janl/mustache.js#functions。我的猜测是这应该有所帮助:
capitalize: function() {
return function(text, render) {
return render(text) * 100;
}
}
答案 2 :(得分:0)
capitalize: function(num) {
return num * 100;
}
应该适合你