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