주어진 서식으로 money 공간을 표시하는 bindingHandler를 만들려고합니다. 그러나 그 값을 사용하고 싶을 때는 다시 부동해야합니다.KnockOut Currency bindingHandler
예를 들어 내가 원하는 것은; 을 감안할 때
money = ko.observable();
:
money(1500000.75);
쇼 :이 같은 1.500.000,75
.
나는 사용했다;
ko.bindingHandlers.numericValue = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
ko.utils.registerEventHandler(element, 'change', function (event) {
var observable = valueAccessor();
var positions = ko.utils.unwrapObservable(allBindingsAccessor().positions) || ko.bindingHandlers.numericValue.defaultPositions;
if (ko.utils.unwrapObservable(allBindingsAccessor().positions) == 0) {
positions = 0;
}
if (isNaN(parseFloat($(element).val())))
observable(0);
else {
if (!ko.utils.unwrapObservable(allBindingsAccessor().noDecimalPoints))
observable(parseFloat($(element).val().replace(".", "").replace(",", ".")).toFixed(positions).replace(",", "."));
else
observable(parseFloat($(element).val().replace(".", "").replace(",", ".")).toFixed(positions));
}
});
},
update: function (element, valueAccessor, allBindingsAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
if (value != null) {
var positions = ko.utils.unwrapObservable(allBindingsAccessor().positions) || ko.bindingHandlers.numericValue.defaultPositions;
if (ko.utils.unwrapObservable(allBindingsAccessor().positions) == 0) {
positions = 0;
}
var formattedValue = parseFloat(value).toFixed(positions);
var finalFormatted = formattedValue;
if (!ko.utils.unwrapObservable(allBindingsAccessor().noDecimalPoints))
finalFormatted = ko.bindingHandlers.numericValue.withCommas(formattedValue);
ko.bindingHandlers.value.update(element, function() { return finalFormatted; });
}
},
defaultPositions: 2,
noDecimalPoints: false,
withCommas: function (original) {
original += '';
x = original.split('.');
x1 = x[0];
x2 = x.length > 1 ? ',' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + '.' + '$2');
}
return x1 + x2;
}
};
바인딩뿐만
및 HTML로
<input class="actTextBox" placeholder="" data-bind="numericValue: money">
. 하지만 "1500000.43"을 입력하면 아무 것도 볼 수 없습니다. 나는 공백을 본다.
나는 어떤 답변을 찾을 수 없습니다.
당신은 자신을 바인딩 처리기를 작성 않았거나 당신은 어딘가에 복사 했습니까? – Tomalak