我有一个名为printArray
的助手,它只打印数组中的每个项目。当我在JS中定义数组并通过上下文对象将其传递给帮助程序时,它工作得很好。我想要做的是在模板中定义数组,如:
{{printArray arr=[1, 3, 4] }}
不幸的是,到达我的助手时,arr
键指向undefined
。是否有任何有效的语法来在我的助手中获取数组而不在javascript中定义它?
答案 0 :(得分:8)
您可以使用JavaScript的arguments
数组来完成此类操作。 arguments
数组使您可以访问调用它时传递给函数的每个值。
这将允许您使用如下语法:
{{printArray 1 3 4}}
代码如下所示:
Handlebars.registerHelper('printArray', function() {
//Last argument is the options object.
var options = arguments[arguments.length - 1];
//Skip the last argument.
for(var i = 0; i < arguments.length - 1; ++i) {
//Do your thing with each array element.
}
//Return your results...
return '';
});
答案 1 :(得分:3)
使用eval()
,使用这样的帮助器几乎可以实现这一点:
Handlebars.registerHelper('printArray', function(values) {
var array = eval(values);
if (array.constructor === Array()) {
...
}
}
以上允许您从模板中调用它:
{{printArray '[0, 1, 2]'}}
对此方法的一个警告是,您必须将数组作为字符串传递。
答案 2 :(得分:2)
您需要使用另一个返回数组的帮助程序
Template.ArrayDemo.helpers({
arrayValues: [1, 2, 3],
printArray: function(arr) {
for (i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
}
});
现在你可以做到
{{printArray arr=arrayValues}}
答案 3 :(得分:1)
您是否尝试过传递数组的括号值?
{{printArray [1, 3, 4]}}
我知道你可以很容易地传入对象,作为把手辅助方法的参数:
{{printArray {arr: [1, 3, 4]} }}
看看这些令人敬畏的辅助方法,其中大部分是我从其他地方偷走的,其中一些是我编写或调整过的......它们是我在这个主题上的参考起点:
https://github.com/zeroasterisk/Presenteract/blob/master/client/lib/handlebar-helpers.js
答案 4 :(得分:1)
您可以定义一个数组助手,如下所示。
Handlebars.registerHelper('array', function() {
return Array.prototype.slice.call(arguments, 0, -1);
}
{{printArray (array 1 3 4)}}
答案 5 :(得分:0)
{{printArray '1,3,4'}}
Handlebars.registerHelper("printArray", function(values){
let array = values.split(",");
console.log(array);
});