我有一个带有值绑定的文本输入控件。对于value属性,我有一个扩展器。
整个想法是实现每当值被清空时我想要将其设置回旧值的情况。
ko.extenders.myextender = function (target, precision) {
//create a writeable computed observable to intercept writes to our observable
var result = ko.computed({
read: target, //always return the original observables value
write: function (newValue) {
alert(target.peek());
if (!newValue) {
//target("");
target(target.peek());
target.notifySubscribers(target.peek());
}
}
});
return result;
}
function viewModel() {
this.Value = ko.observable("abcd");
this.Value.subscribe(function (newValue) {
alert("Do something with the newValue");
});
this.Value = this.Value.extend({
myextender: 0
});
}
ko.applyBindings(new viewModel());
问题是每当我回退它没有反映在UI中的旧值时。
答案 0 :(得分:2)
您当前的代码有两个问题:
target
不为空时,不设置newValue
属性。因此,当您在输入中更改某些内容时,它不会更新您的underlaying observable。
在空值的情况下,您需要在计算机上调用notifySubscribers
,而不是在uderlaying observable target
上调用var result = ko.computed({
read: target, //always return the original observables value
write: function (newValue) {
if (!newValue) {
target(target.peek());
// notify the subscribers to reset the value in the input
result.notifySubscribers(target.peek());
}
else{
// newValue is not empty so set the target
target(newValue);
}
}
});
。因为您的计算机绑定在UI上,因此必须通知值绑定有关其值的更改。
所以你的固定计算机应该是这样的:
{{1}}
演示JSFiddle。