쉼표로 구분 된 숫자의 서식을 지정하는 Knockout bindingHandler를 만들어야했습니다. 조금 검색 한 후 here (솔루션에 @nemesv에게 감사함)을 찾았습니다. 변환을 위해 http://numeraljs.com/을 사용합니다. 다음과 같이knockout bindingHandler (쉼표로 구분 된 동일한 번호의 항목을 다시 텍스트 상자에 입력)
바인더는 다음과 같습니다
ko.bindingHandlers.formatMoney = {
init: function(element, valueAccessor) {
var value = valueAccessor();
var interceptor = ko.computed({
read: function() {
return numeral(ko.unwrap(value)).format('0,0.00');
},
write: function(newValue) {
if($.trim(newValue) == '')
value("0");
else
value(numeral().unformat(newValue));
}
}).extend({ notify: 'always' });
if(element.tagName.toLowerCase() == 'input')
ko.applyBindingsToNode(element, {
value: interceptor
});
else
ko.applyBindingsToNode(element, {
text: interceptor
});
}
}
나는 그것을 사용하고 정상적인 경우에 완벽하게 작동합니다. 하지만 텍스트 상자와 함께 사용할 때 수정해야합니다.
관측 값이 실제로 사용되고있는 경우에만 통보되는 관측 가능성이 사용된다는 것이 문제입니다. 매번 다른 값을 입력하면 실제 포맷터가 적용됩니다. 예를 들어
- 처음으로 1234를 입력하고 텍스트 상자에 포커스가 없으면 1,234.00으로 변환됩니다.
- 이제 텍스트 상자에 1234를 다시 입력하십시오. 작동하지 않고 바인더의
read
메서드가 호출되지 않습니다.
관찰 가능 값이 동일해도 항상 interceptor's
read
메서드를 실행하려면 어떻게해야합니까?
샘플 바이올린 : http://jsfiddle.net/vEcSq/4/
감사합니다.
고맙습니다. Robert. 이것이 내가 필요한 것입니다. – Aamir