【问题标题】:handlerbar js extending arithmetic addition helper车把 js 扩展算术加法助手
【发布时间】:2014-06-25 14:20:36
【问题描述】:

我写了一个助手来在车把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}}

如何编写一个助手来获得类似的东西?

【问题讨论】:

  • 助手可以接收任意数量的输入,这里有一个例子,有 4 个。jsfiddle.net/ckross01/5eSyL你还有其他事情想要完成吗?

标签: javascript handlebars.js helper


【解决方案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 方法简单地循环数组。

其余代码自解释。

【讨论】:

  • 我已经添加了一个小解释。
猜你喜欢
  • 2020-04-02
  • 1970-01-01
  • 2013-02-05
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
相关资源
最近更新 更多