我写了一个助手来在车把js中添加货币。虽然这适用于两个项目,但如何将其扩展到任意数量的项目?
即,
{{total a b}}
Handlebars.registerHelper("total", function(a,b) {
return "$"+(Number(a.replace(/[^0-9\.]+/g,"")) + Number(b.replace(/[^0-9\.]+/g,""))).toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
});
到,n个项目。即,
{{total a b c d}}
如何写一个助手来获得类似的东西?
答案 0 :(得分:1)
这应该是你要找的东西
Handlebars.registerHelper("total", function(a,b) {
var nums = [].slice.call(arguments,0,-1);
var sum = nums.reduce(function(prev,next) {
return prev + Number(next.replace(/[^0-9\.]+/g, ""));
},0);
return "$" + sum.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
});
您可以使用以下背景和模板
在tryhandlebarsjs中对此进行测试{
"a": "10",
"b": "20",
"c": "30",
"d": "40"
}
{{total a b c d}}
在帮助程序中,您将有一个额外的options
对象以及参数。 options
对象是最后一个参数。所以首先我们需要获得一个没有options
的传递参数的列表。
arguments
是一个可在函数内访问的javascript关键字。它是一个类似于对象的数组,它包含所有传递的参数。由于它没有切片方法,我们使用数组的切片方法。我们在参数(call
)的上下文中执行该方法。所以我们使用这一行
var nums = [].slice.call(arguments,0,-1);
在下一行中,我们使用内置的reduce
方法循环数组。
其余代码自我解释。