KnockoutJS脚本使用逗号分隔的数值创建问题

时间:2017-07-03 13:07:15

标签: javascript jquery knockout.js

我正在尝试将javascript函数绑定在一起,但是在绑定时我一直遇到自动转换的十进制数值(53.000转换为53000)的问题。以下是我试图实现的例子;

<script data-bind="text: 'getNewValue(Price ',' + VAT + ');'"></script>

增值税为53.000,价格为378。

我试过附加.toFixed(2)但没有成功;

<script data-bind="text: 'getNewValue(Price.toFixed(2) ',' + VAT.toFixed(2) + ');'"></script>

提前感谢您对此的任何帮助!

/彼得

2 个答案:

答案 0 :(得分:3)

我最初写这篇文章是为了处理电话号码,但它似乎适用于货币。 (注意:我在这里使用USD)。使用此可订阅计算,您只需将其附加到任何货币元素,它将正确显示为货币,但您将该值保留为float / int。这样可以更轻松地在整个视图模型中进行计算。

function ToAmount() {
  return ko.computed({
    read: function() {
      var num = parseFloat(ko.unwrap(this));
      return this() ? "$" + num.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ",") : "$0.00";
    },
    write: function(_amount) {
      this(_amount);
      this.notifySubscribers();
    },
    owner: this,
  }).extend({
    notify: 'always'
  });
}
ko.subscribable.fn.ToAmount = ToAmount;

function vm() {
  var self = this;

  self.Money = ko.observable(12.345);
}

ko.applyBindings(new vm());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<input data-bind="value: Money.ToAmount()">

答案 1 :(得分:1)

在knockout.js中你可以直接在data-bind中定义函数,如下所示:

<script data-bind="text: getNewValue(Price.toFixed(2) + ',' + VAT.toFixed(2));"></script>

这将调用你的getNewValue函数,在一个变量中将两个值十进制固定为2

如果你只想要连接这两个值,你也可以直接在databind中这样做:

<script data-bind="text: Price.toFixed(2) + ', ' + VAT.toFixed(2);"></script>

这会导致: 53.00,378.00