Handlebars return 如果长度未知,则为具有特定索引的数组元素
Handlebars return an array element with certain index if the length is unknown
使用 Handlebars 和 Node,我有一个长度不断变化的数组,每次它发生变化时我都需要获取最后一个元素的前一个。
所以如果你想得到最后一个元素,你可以这样做:
{{#each array}}
{{#if @last}}
{{this}}
{{/if}}
{{/each}}
它会 return 你最后一个元素。
我有数学助手,可以执行基本的数学运算。
例如,我可以获得所需的索引号
{{math array.length '-' 1}}
但我不能将它与另一个块助手一起使用,例如:
{{#each array}}
{{#if math @last '-' 1}}
{{this}}
{{/if}}
{{/each}}
这是怎么做到的?谢谢。
您可以为此注册自己的助手:
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}}
首先,您声明您不能在 #if
块助手的胡须内使用您的 math
助手,例如 {{#if math @last '-' 1}}
。这不是真的。车把支持 subexpressions.
Handlebars offers support for subexpressions, which allows you to invoke multiple helpers within a single mustache, and pass in the results of inner helper invocations as arguments to outer helpers. Subexpressions are delimited by parentheses.
但是,{{#if (math @last '-' 1)}}
没有多大意义,因为 @last
是一个布尔值,我建议不要从 true
或 [=18] 中减去 1
=].
如果您的问题是渲染数组中的单个元素 - 例如,倒数第二个 - 那么我不明白您为什么 #each
遍历 array
。您需要做的就是将内置的 lookup
helper 与您现有的 math
助手结合起来,您的模板就会变得更加简单:
{{lookup array (math array.length '-' 2)}}
注意:请记住,JavaScript 数组是从零开始索引的,因此我们需要减去 2
以获得最后一个元素的第二个。
我创建了一个简单的fiddle供参考。
使用 Handlebars 和 Node,我有一个长度不断变化的数组,每次它发生变化时我都需要获取最后一个元素的前一个。
所以如果你想得到最后一个元素,你可以这样做:
{{#each array}}
{{#if @last}}
{{this}}
{{/if}}
{{/each}}
它会 return 你最后一个元素。 我有数学助手,可以执行基本的数学运算。 例如,我可以获得所需的索引号
{{math array.length '-' 1}}
但我不能将它与另一个块助手一起使用,例如:
{{#each array}}
{{#if math @last '-' 1}}
{{this}}
{{/if}}
{{/each}}
这是怎么做到的?谢谢。
您可以为此注册自己的助手:
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}}
首先,您声明您不能在 #if
块助手的胡须内使用您的 math
助手,例如 {{#if math @last '-' 1}}
。这不是真的。车把支持 subexpressions.
Handlebars offers support for subexpressions, which allows you to invoke multiple helpers within a single mustache, and pass in the results of inner helper invocations as arguments to outer helpers. Subexpressions are delimited by parentheses.
但是,{{#if (math @last '-' 1)}}
没有多大意义,因为 @last
是一个布尔值,我建议不要从 true
或 [=18] 中减去 1
=].
如果您的问题是渲染数组中的单个元素 - 例如,倒数第二个 - 那么我不明白您为什么 #each
遍历 array
。您需要做的就是将内置的 lookup
helper 与您现有的 math
助手结合起来,您的模板就会变得更加简单:
{{lookup array (math array.length '-' 2)}}
注意:请记住,JavaScript 数组是从零开始索引的,因此我们需要减去 2
以获得最后一个元素的第二个。
我创建了一个简单的fiddle供参考。