调用helper(Handlebars)后无法访问数组元素

时间:2018-04-21 21:15:25

标签: node.js handlebars.js helper

我已在我的应用文件中注册了此帮助:

{{#if_greater 20 occurrences}}
     <tr class="danger">
         <td>{{this.date}}</td>
         <td>{{this.serial}}</td>
         <td>{{this.operator}}</td>
         <td>{{this.vehicle}}</td>
         <td>{{this.stop}}</td>
         <td>{{this.line}}</td>
         <td>{{this.zone}}</td>
         <td>{{this.occurrences}}</td>
         <td>{{this.encrypted}}</td>
     </tr>
{{/if_greater}}

然后,在我的hbs文件中:

this.date

但是,date不会输出任何内容,也不会调用canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { if (location.protocol !== 'https:') { location.href = 'https:' + window.location.href.substring(window.location.protocol.length); } ... 。如果我不打电话给我的助手,我可以输出它。帮手怎么了?

2 个答案:

答案 0 :(得分:0)

如果有人遇到同样的问题,我找到了一个解决方法(并保留了帮助程序)。

{{1}}

答案 1 :(得分:0)

问题是您在Coffee(caffeineAmountMg: 32320, caffeineAmountG: 32, countryOfOrigin: "Country", taste: "Taste") 电话中使用arrow function expression而不是function expression。重要的是要注意箭头函数表达式只是一种编写函数表达式的简洁新方法;他们的行为不同

此案例的相关差异是arrow function expressions do not have their own this object。相反,他们获得了封闭执行上下文的hbs.registerHelper

使用旧式函数表达式(如this)定义Handlebars助手时,Handlebars会确保执行的助手中的hbs.registerHelper('if_greater', function (a, b, opts) { /*...*/ });是模板中的当前上下文。来自文档:

  

Handlebars始终使用当前上下文调用帮助器this,因此您可以使用this调用块来评估当前上下文中的块。

但是,当您使用箭头函数表达式时,this来自定义函数的词法范围this可以是很多内容,但不能成为您想要的模板上下文。

有关箭头函数与函数表达式的完美摘要,请参阅:https://stackoverflow.com/a/34361380/3397771

要确认您的帮助程序在写为非箭头函数表达式时按预期工作,请参阅此fiddle