即使您写入的值没有改变,曾经有一段时间,即使写入时,observables也会始终通知。由于我相信KO 1.21,当它们的实际价值没有变化时,可观察的数据将会抑制通知。
简单的解决方案是,您可以调用valueHasMutated
上的observable来确保发送通知。
一个更好的办法,虽然写的计算观察到的会是这样的:
//writable computed to parse currency input
this.editPrice = ko.computed({
//return a formatted price
read: function() {
return viewModel.formatCurrency(this.price());
},
//if the value changes, make sure that we store a number back to price
write: function(newValue) {
var current = this.price(),
valueToWrite = viewModel.parseCurrency(newValue);
//only write if it changed
if (valueToWrite !== current) {
this.price(valueToWrite);
} else {
//if the rounded value is the same, but a different value was written, force a notification for the current field
if (newValue !== current) {
this.price.valueHasMutated();
}
}
},
owner: this
});
在这种情况下,我们只能写观察到当已解析的值是不同的,我们只会迫使通知时用户输入的值与当前值不同。即使用户输入一个将当前价格四舍五入的值,这也会导致该字段更新。
这里是更新的样本:http://jsfiddle.net/rniemeyer/6A4aN/
工作就像一个魅力。谢谢一堆。 – Corence 2012-07-09 18:22:34