循环遍历数组时的把手数学表达式

Ogn*_*jen 1 javascript node.js express handlebars.js

我正在练习节点,我遇到了一个小问题。我使用把手作为模板引擎,使用猫鼬与我的数据库进行交互。在我的 .hbs 模板中,我循环遍历数据库中的每条记录,当然我将这些记录传递给我的视图

router.get('/', function(req, res, next) {
Exam.find(function(err, predmeti) {
if (err) {
  console.log(err);
}
  res.render('index',{
    predmeti: predmeti
  })
})

}); 
Run Code Online (Sandbox Code Playgroud)

现在,当我predmeti使用 #each循环时,当我尝试执行数学表达式时,引擎会抛出错误,例如

{{#each predmeti}}
 <h1>{{100/(brKolokvijuma/finished)}}</h1>
{{/each}}
Run Code Online (Sandbox Code Playgroud)

brKolokvijuma and finished两者都有一个数值,但由于某种原因,我收到一个错误Expecting ID got OPEN_SEXPR

所以我假设当我循环遍历数组时,把手不会让我做数学表达式。我该如何解决这个问题?

sci*_*lot 5

有一些 Handlebars 插件可以让你做他们认为你不应该在视图中做的事情,但每个人仍然想这样做。

例如,Assemble.io 数学助手和嵌套表达式将使您能够执行以下操作:

{{#each predmeti}}
   <h1>{{divide 100 (divide brKolokvijuma finished)}}</h1>
{{/each}}
Run Code Online (Sandbox Code Playgroud)

第二种方法,如果您的数学表达式不是那么多样化并且围绕您的视图重复使用(常见计算,例如税收或四舍五入),您可以编写自己的更简单/更轻巧的插件:

Handlebars.registerHelper("divideMyThings", function(thing1, thing2, thing3) {
  return thing1 / thing2 / thing3;
});
Run Code Online (Sandbox Code Playgroud)

在您的模板中调用:

{{divideMyThings 100 brKolokvijuma finished}}
Run Code Online (Sandbox Code Playgroud)

第三,您通常可以预先计算数据表,直到只有一个变量,然后使用内置查找功能。这不需要额外的插件。这可能对这个特定问题没有帮助,但我想我会提到它作为一种工具。