我正在练习节点,我遇到了一个小问题。我正在使用把手作为模板引擎,并且用于与我的数据库进行交互。在我的.hbs模板中,我循环遍历数据库中的每条记录,当然我将记录传递给我的视图
router.get('/', function(req, res, next) {
Exam.find(function(err, predmeti) {
if (err) {
console.log(err);
}
res.render('index',{
predmeti: predmeti
})
})
});
现在当我使用#each循环遍历predmeti
时,当我尝试执行数学表达式时,引擎会抛出错误,例如
{{#each predmeti}}
<h1>{{100/(brKolokvijuma/finished)}}</h1>
{{/each}}
brKolokvijuma and finished
都有一个数字值,但由于某种原因我收到错误 Expecting ID得到了OPEN_SEXPR
所以我假设当我循环数组时,把手不会让我做数学表达式。我怎么解决这个问题?
答案 0 :(得分:2)
Handlebars有插件可以让你做他们认为你不应该在视图中做的事情,但每个人仍然想要。
例如the Assemble.io maths helpers和嵌套表达式可以使您执行以下操作:
var Name = "Jone Doe Doone";
var result = [Name.split(" ")[0]];
result.push(Name.substr(Name.split(" ")[0].length).trim());
console.log(result);
第二种方法,如果您的数学表达式不是那么多变并且在您的视图中重复使用(常见的计算,例如税或舍入),您可以编写自己的更简单/更轻的插件:
{{#each predmeti}}
<h1>{{divide 100 (divide brKolokvijuma finished)}}</h1>
{{/each}}
在模板中调用:
Handlebars.registerHelper("divideMyThings", function(thing1, thing2, thing3) {
return thing1 / thing2 / thing3;
});
第三,您通常可以预先计算数据表,直到您只有一个变量,然后使用builtin lookup feature。这不需要额外的插件。这可能对这个具体问题没有帮助,但我认为我将其作为一种工具提及。