有没有办法拒绝/取消对可观察值的修改?像这样:
observable.subscribe (function (newvalue) {
if ( newvalue < 0 ) {
// cancel changing
}
else{
// proceed with change
}
}, this)
有没有办法拒绝/取消对可观察值的修改?像这样:
observable.subscribe (function (newvalue) {
if ( newvalue < 0 ) {
// cancel changing
}
else{
// proceed with change
}
}, this)
编辑:
我发现了别的东西:Writeable computed observables。
这是一个例子:
function AppViewModel() {
this.field = ko.observable("initValue");
this.computedField = ko.computed({
read: function () {
return this.field();
},
write: function (value) {
if(value > 0) {
this.field(value);
}
},
owner: this
});
}
那么你绑定到计算域。
/编辑
我会使用自定义绑定。
这是自定义绑定的教程: http://learn.knockoutjs.com/#/?tutorial= custombindings
或者这里是文档: http: //knockoutjs.com/documentation/custom-bindings.html
为了帮助拒绝写入值,我使用了以下内容:
我使用以下代码扩展了 Knockout:
ko.conditionedObservable = function (initialValue, condition) {
var obi = ko.observable(initialValue);
var computer = ko.computed({
read: function () { return obi(); },
write: function (newValue) {
//unwrap value - just to be sure
var v = ko.unwrap(newValue);
//check condition
if (condition(v)) {
//set it to the observable
obi(v);
}
else {
//reset the value
computer.notifySubscribers();
}
}
});
return computer;
};
在这样的对象中使用它:
field = ko.conditionedObservable<number>(null, (v) => parseInt(v) > 0);
有关更多解释,请查看我的Conditioning Knockout Observables:reject values博客。