更新可写计算可观察对象的依赖关系

时间:2013-06-10 16:13:13

标签: javascript knockout.js observable writable

我正在尝试使用knockout.js'计算的observables在模型上设置类似C#的属性。我希望observable只接受有效值。简化示例:

function Model()
{
    var a = 100;
    var b = 200;

    var $ = this;
    this.a = ko.computed({
        read: function(){return a},
        write: function(value){
            var newval = parseFloat(value, 10);
            if(newval < 1000) 
                a = newval;
        }});

    this.b = ko.observable(b);
}

写入a悬停不会更新绑定。是否可以启用更改a,就好像它是Model的常规成员,但附加了额外的功能?

我知道我可以使用第二个observable来包含实际值并依赖它的更新机制,但随着这种计算属性数量的增加,这种方法变得很麻烦。

1 个答案:

答案 0 :(得分:1)

Computed observable不适合您的示例,因为计算的observable是一个应该依赖于一个或多个其他observable的函数。

您可以使用extenders来实现此目的。这是一个带有演示的fiddle

ko.extenders.maxNumber = function(target, option) {
    var result = ko.computed({
        read: target,
        write: function(value){
            var newval = parseFloat(value, 10);
            if (newval < option) {
                target(newval);
            } else {
                alert('Number is to big');
            }
        }
    });

    result(target());

    return result;
};

function Model() {
    var a = 100;
    this.a = ko.observable(a).extend({ maxNumber: 1000 });
}