使用Handlebars和Node,我有一个长度不断变化的数组,每次更改时我总是需要在它的最后一个元素之前得到它。
因此,如果你想获得最后一个元素,你可以这样做:
{{#each array}}
{{#if @last}}
{{this}}
{{/if}}
{{/each}}
它将返回最后一个元素。 我有Math助手,可以执行基本的数学运算。 例如,我可以得到所需的索引号
{{math array.length '-' 1}}
但我不能将它与另一个块助手一起使用,例如:
{{#each array}}
{{#if math @last '-' 1}}
{{this}}
{{/if}}
{{/each}}
怎么可以这样做?谢谢。
答案 0 :(得分:2)
首先,您声明不能在math
块助手的胡须中使用#if
助手,例如{{#if math @last '-' 1}}
。这不是真的。把手支持subexpressions。
Handlebars提供对子表达式的支持,它允许您在一个小胡子中调用多个帮助程序,并将内部帮助程序调用的结果作为参数传递给外部帮助程序。 Subexpressions由括号分隔。
然而,{{#if (math @last '-' 1)}}
没有多大意义,因为@last
是布尔值,我建议不要从1
或true
中减去false
的奇怪之处
如果您的问题是从阵列中渲染单个元素 - 例如,倒数第二个 - 那么我不明白为什么您#each
通过array
。您所需要做的就是将内置的lookup
helper与现有的math
帮助器结合起来,您的模板变得更加简单:
{{lookup array (math array.length '-' 2)}}
注意:请记住,JavaScript数组是零索引的,因此我们需要减去2
以从最后一个元素中获取第二个。
我创建了一个简单的fiddle供参考。
答案 1 :(得分:1)
您可以为此注册自己的帮助:
Handlebars.registerHelper('isSecondLastArrayItem', function(array, index, options) {
if((array.length - 2) === index)
return options.fn(this);
return;
});
并像这样使用它:
{{#each array}}
{{#isSecondLastArrayItem @root.array @index}}
{{title}}
{{/isSecondLastArrayItem}}
{{/each}}
示例数据:
{
array: [{ title: 'aa' }, { title: 'vv' }]
}
在sandbox中尝试。
编辑:任何索引的案例
Handlebars.registerHelper('isNthLastArrayItem', function(array, index, offset, options) {
if(((array.length >= offset) && (array.length - offset) === index)
return options.fn(this);
return;
});
用法(来自最后的2nd
项目):
{{#each array}}
{{#isNthLastArrayItem @root.array @index 2}}
{{title}}
{{/isNthLastArrayItem}}
{{/each}}