我有一个将数字格式的自定义扩展KO,此扩展包在计算原来的观察到的,返回新参考计算。
这里有一个问题,可以说下来之前数扩展器被称为有人添加了一个验证,以可观察到的外链,那么这个验证不会当计算由数字扩展暴露工作。
我可以以某种方式从可观察验证移动计算的?
关当然,我可以请确保验证的数量扩展后添加,但并不觉得很扎实,尤其不要在一个大项目
扩展器看起来像
ko.extenders.asNumber = function (target) {
var result = ko.computed({
read: function () {
return Globalize.format(target(), "N2");
},
write: function (value) {
if (value != null && value.substr) {
var parsedValue = Globalize.parseFloat(value);
if (isNaN(parsedValue)) {
parsedValue = value;
}
value = parsedValue;
if (!String.hasValue(value))
value = null;
}
target(value);
target.valueHasMutated();
}
});
target.hasValue = function () {
return target() != null && target() != 0;
};
result.raw = target;
return result;
};
更新:
解决它的方法之一
function copyValidation(observable, newObservable) {
if (observable.__valid__) {
newObservable.extend({ validatable: true });
ko.utils.arrayForEach(observable.rules(), function(rule) {
newObservable.rules.push(rule);
});
observable.rules([]);
}
}
最终版本
如果没有人有一个更好的办法,我会去为这
function moveValidation(observable, newObservable) {
if (observable.__valid__) {
newObservable.extend({ validatable: true });
ko.utils.arrayForEach(observable.rules(), function(rule) {
newObservable.rules.push(rule);
});
observable.extend({ validatable: false });
}
}
更新
上面溶液observable.extend({ validatable: false });
确实由于某些原因,一旦你捆绑,然后再缩小你的脚本不能正常工作。 observable.rules([]);
作品