1

要求是格式化所有页面上显示的金额。这是我的自定义绑定代码。

(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,则它将停止工作。在每一页上写这段代码会使代码看起来非常难看。有没有办法全局定义自定义绑定并在所有页面中使用它。这是我的淘汰赛项目,所以我完全一无所知。

4

1 回答 1

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" />

于 2018-11-29T02:54:26.650 回答