Knockout.js 拒绝可观测值变化

Knockout.js 拒绝可观测值变化,knockout.js,Knockout.js,是否有办法拒绝/取消对可观测值的修改? 像这样: observable.subscribe (function (newvalue) { if ( newvalue < 0 ) { // cancel changing } else{ // proceed with change } }, this) observable.subscribe(函数(newvalue)){ 如果(新值parseInt(v)>0); 更多解释请

是否有办法拒绝/取消对可观测值的修改? 像这样:

observable.subscribe (function (newvalue) {
   if ( newvalue < 0 ) {

        // cancel changing
   }
   else{ 
        // proceed with change
   }

}, this)
observable.subscribe(函数(newvalue)){
如果(新值<0){
//取消更改
}
否则{
//继续改变
}
},本页)
编辑:

我还发现了其他东西:可写的计算可观测值

以下是一个例子:

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
    });
}
然后绑定到计算字段

/编辑

我会选择定制装订

以下是自定义绑定的教程:

或者,以下是文档:

为了帮助拒绝写入值,我使用了以下方法:

  • 创建存储值的隐藏可观察对象
  • 基于隐藏的可观察值返回可写的计算可观察值
  • 当某些东西被写入计算的可观察对象时,在接受它之前验证它
我用以下代码扩展了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);
field=ko.conditionedObservable(null,(v)=>parseInt(v)>0);
更多解释请查看我的博客