要求是格式化所有页面上显示的金额。这是我的自定义绑定代码。
(function () {
function refresh(element, valueAccessor) {
var val = ko.utils.unwrapObservable(valueAccessor());
$(element).text(getCultureSpecificAmount(val));
}
ko.bindingHandlers.currency = {
init: refresh,
update: refresh
}
})();
这是格式化金额的方法(不太相关,但仍在过帐中)
function getCultureSpecificAmount(number) {
var result = 0;
var regex = /[+-]?\d+(?:\.\d+)?/g;
var tempNumber = number;
if (match = regex.exec(number.toString())) {
tempNumber = match[0];
}
result = (parseFloat(tempNumber)).toLocaleString(culture, { maximumFractionDigits: currencyDecimalDigits, minimumFractionDigits: 0 });
return (number.toString()).replace(tempNumber, result);
}
这是来自cshtml,以显示我是如何绑定它的
<span style="font-weight:bold" data-bind="currency:PurchaseOrderValue"></span>
getCultureSpecificAmount 方法是使用通用js编写的。目前,我正在为每个js编写用于自定义绑定的代码。如果我将此代码移到common.js,则它将停止工作。 在每个页面上编写此代码会使代码看起来很难看。有没有一种方法全局定义自定义绑定并在所有页面上使用它。 这是我的淘汰赛项目,所以我一无所知。
答案 0 :(得分:0)
这是可行的方法。我发现的问题之一是if(match = regex.exec(...))
需要移到if(...)
语句之外,但是除此之外,下面的代码基本上是相同的,因此您并不是很遥远工作正常。
function getCultureSpecificAmount(number) {
var result = 0;
var regex = /[+-]?\d+(?:\.\d+)?/g;
var tempNumber = number;
var match = regex.exec(number.toString());
if (match != null) {
tempNumber = match[0];
}
var culture = "en-AU";
var currencyDecimalDigits = 2;
result = (parseFloat(tempNumber)).toLocaleString(culture, {
maximumFractionDigits: currencyDecimalDigits,
minimumFractionDigits: 0
});
return (number.toString()).replace(tempNumber, result);
}
function refresh(element, valueAccessor) {
var val = ko.utils.unwrapObservable(valueAccessor());
$(element).text(getCultureSpecificAmount(val));
}
ko.bindingHandlers.currency = {
init: refresh,
update: refresh
}
var vm = {
PurchaseOrderValue: ko.observable(3596.94985)
};
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label>Purchase Order Total</label>
<span style="font-weight:bold" data-bind="currency:PurchaseOrderValue"></span>
<br/>
<label>Edit Purchase Order Total</label>
<input data-bind="textInput: PurchaseOrderValue" />