我正在尝试将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>
提前感谢您对此的任何帮助!
/彼得
答案 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