它看起来像你想要的是一个可观察的,不允许验证失败的分配。你可以做到这一点与普通观察到的一个扩展:
ko.extenders.constrain = function (target, option) {
var lastValidValue = target();
target.subscribe(function (newValue) {
if (option(newValue)) {
lastValidValue = newValue;
} else {
target(lastValidValue);
}
});
return target;
};
调用它像这样以防止falsy值的分配:
var notFalsy = ko.observable("Bob").extend({
constrain: function (newValue) {
return newValue;
}
});
更新:这是可能显著,上述方法确实允许纠正之前的任务。如果重要的是观察值永远不会取无效值,那么可以使用一个计算结构(非常像Anders的解决方案)。
function constrainedObservable(constraint) {
var value = ko.observable();
return ko.computed({
read: value,
write: function (newValue) {
if (constraint(newValue)) {
value(newValue);
}
}
});
}
演示http://jsfiddle.net/o641v37L/1/(取消注释分配使用计算)
您是否在寻找扩展 http://knockoutjs.com/documentation/extenders.html –
你能解释一下你的意思*”继承ko.computed到原型类“*? – Tomalak
你应该更新你的标题,我的答案更多是针对标题“继承ko.computed到原型类” – Anders