我正在尝试编写输入字段值的验证。 如果值是错误的,那么我想设置一个默认值。 不幸的是,它正在检查它,设置默认值,然后设置错误的值。 我试图使用扩展程序验证。在我尝试使用"订阅"但再次没有成功。这是我关于场景的例子
在输入开始时我有0.56 我将它改为0.95。因此,扩展器检查0.95是否比0.85更粗,并将值更改为0.85。不幸的是,在我的情况下仍然是0.95。我添加了一些警告后目标(0.85)我可以看到该值正在变为0.85,但之后又是0.95。
知道我做错了吗?
这是我的代码
ko.extenders.checkInput = function (target) {
var result = ko.computed({
read: target,
write: function (newValue) {
if (newValue > 0.85) {
target(0.85);
}
});
//return the new computed observable
result(target());
return result;
};
self.inputValue = ko.observable(0.56).extend({ checkInput: '' });
答案 0 :(得分:1)
如果值没有改变,您需要使用notifySubscribers并将计算机扩展为始终通知有关更改(根据knockout documentation on extenders):
ko.extenders.checkInput = function(target, option) {
var result = ko.computed({
read: target,
write: function(newValue) {
var current = target(),
valueToWrite = Math.min(newValue, 0.85);
if (valueToWrite !== current) {
target(valueToWrite);
} else {
if (newValue !== current) {
target.notifySubscribers(valueToWrite);
}
}
}
}).extend({ notify: 'always' });
result(target());
return result;
};
答案 1 :(得分:0)
如果值通过验证,则不会更新target
。试试这个:
ko.extenders.checkInput = function (target) {
var result = ko.computed({
read: target,
write: function (newValue) {
target(Math.min(newValue, 0.85));
}
});
//return the new computed observable
result(target());
return result;
};