0

我正在尝试使用 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 来包含实际值并依赖它的更新机制,但是随着此类计算属性数量的增加,这种方法很快变得很麻烦。

4

1 回答 1

1

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

您可以改为使用扩展器来实现此目的。这是一个带有演示的小提琴。

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 });
}
于 2013-06-10T18:50:32.950 回答