我有一个要求,如果我们的剔除网格中的所有数字列都为负数,则它们应该具有红色以警告用户。
我可以使用标准绑定来做到这一点,但它会向视图模型和视图添加大量代码。
我使用淘汰赛验证框架,他们使用扩展器来添加验证。
我也想做同样的事情,我查看了扩展程序示例,但它们要求您确实向视图中添加元素,验证框架以某种方式仅适用于扩展程序,我该怎么做?我的目标是只需要这样的东西来添加警告
this.accountBalance = ko.observable(data.AccountBalance).extend({ warnIfNegative: true });
更新:我在查看了验证框架之后做了这个,我不喜欢的是你需要覆盖每个绑定才能让它工作,例如我想要这个用于文本和值绑定
(function () {
ko.extenders.negativeValueWarning = function (target, option) {
target.hasWarning = ko.observable();
function warn(newValue) {
target.hasWarning(newValue < 0 ? true : false);
}
warn(target());
target.subscribe(warn);
return target;
};
var init = ko.bindingHandlers.text.init;
ko.bindingHandlers.text.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
if (init)
init(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
var value = valueAccessor();
if (value.hasWarning) {
ko.applyBindingsToNode(element, { negativeValueWarning: value.hasWarning });
}
};
ko.bindingHandlers.negativeValueWarning = {
update: function (element, valueAccessor) {
var warn = ko.utils.unwrapObservable(valueAccessor());
if (warn)
$(element).addClass("negative-warning");
else
$(element).removeClass("negative-warning");
}
};
} ());