0
내 응용 프로그램에 표시되는 동안 숫자를 서식 지정하는 데 numeric.js를 사용하고 있습니다. 그러나 형식을 적용하고 계산 된 관측 가능 값을 변경하려고 시도하면 입력 된 값이 형식화 된 값과 같으면 값이 업데이트되지 않습니다. http://jsfiddle.net/kwt8vy9u/5/Knocout js observable calculate updated가 업데이트되지 않았습니다.
var ChangeWrite = true;
//Function to get first 2 non zero digits after decimal
ko.bindingHandlers.number = {
update: function (element, valueAccessor, allBindingsAccessor, data) {
var observable = valueAccessor(),
formatted = ko.computed({
read: function (key) {
ChangeWrite = false;
if (ko.isObservable(observable)) {
if (observable() || observable() === 0) {
var num = parseFloat(observable());
return numeral(num).format('0,0.00');
}
} else {
if (observable || observable === 0) {
var num = parseFloat(observable)
return numeral(num).format('0,0.00');
}
return '';
}
},
write: function (value) {
if (ChangeWrite) {
var change = true;
if (value != valueAccessor()()) {
change = true;
} else {
change = false;
}
if (!isNaN(value) && value !== '' && change && value.indexOf('-') < 0) {
valueAccessor()(value);
} else {
if ((change || value.indexOf('-') >= 0) && $("#dgConfirm").is(':visible') == false) {
alert('please enter valid value');
}
$(element).val(function() {
if (valueAccessor()() === '') return '';
else {
var num = valueAccessor()()
return numeral(num).format('0,0.00');
}
}());
}
} else {
ChangeWrite = false;
$(element).val(function() {
if (valueAccessor()() === '') return '';
else {
var num = valueAccessor()()
return numeral(num).format('0,0.00');
}
}());
}
},
disposeWhenNodeIsRemoved: element
}).extend({
notify: 'always'
});
ko.applyBindingsToNode(element, {
value: formatted
});
}
};
$(document).ready(function() {
$("#txtOriginal").blur(function() {
ChangeWrite = true;
});
function AppViewModel() {
this.value = ko.observable(10);
}
ko.applyBindings(new AppViewModel());
ChangeWrite = true;
});
예 : 여기
는 바이올린이다 나는 그것이 10.56 서식이 텍스트 상자에 10.562를 입력하고 기본 계산 관찰은 10.562 포함합니다. 그러나 값을 10.56으로 변경하면 기본 계산 된 관찰 가능 항목이 업데이트되지 않습니다. 그것은 여전히 10.562를 사용하고 있습니다. 이 문제는 IE10과 크롬에서 볼 수 있습니다. 그것은 IE에서 제대로 < = 9감사합니다,
프라 빈을하고있다.
많은 코드가 있습니다. 노크 아웃 문제에 초점을 맞춰 예제를 간소화 할 수 있습니까? – JohnnyHK
불필요한 코드를 제거하고 바이올린을 업데이트했습니다. – praveen