循环数组时的句柄数学表达式

时间:2016-12-21 11:49:10

标签: 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
  })
})

}); 

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

{{#each predmeti}}
 <h1>{{100/(brKolokvijuma/finished)}}</h1>
{{/each}}

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

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

1 个答案:

答案 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。这不需要额外的插件。这可能对这个具体问题没有帮助,但我认为我将其作为一种工具提及。