【发布时间】:2012-12-18 10:19:36
【问题描述】:
我将 Knockout 用于绑定到具有一定深度/复杂性的 ViewModel 的视图。
要验证我的 ViewModel,我需要计算整个 VM 树(遍历和比较后代)。我希望利用敲除验证插件@https://github.com/ericmbarnard/Knockout-Validation 创建一些任意自定义验证规则并报告任何错误。
我使用 KO 计算的 observable @http://jsfiddle.net/drdamour/ZrVZ7/ 设置了一种可能的方法。验证规则是确保没有 2 个 SubCollections 具有相同的值。这是有效的,但它没有使用 Knockout-Validation,我的规则现在在我的计算 observable 中实现,这似乎是错误的。
我的问题与Knockout Validation validatedObservable group error 非常相似,但我发现发现的解决方案(托管在http://jsfiddle.net/CGuW2/6/)不太理想:
var viewModel = {
num1: ko.observable("50").extend({ number: true, min: 0, max: 100 }),
num2: ko.observable("50").extend({ number: true, min: 0, max: 100 })
};
viewModel.isValidSum = ko.validatedObservable({
num1: viewModel.num1,
num2: viewModel.num2
}).extend({ mustEqual: 100 });
ko.applyBindings(viewModel);
因为它通过将经过验证的 self 作为属性添加到自身 (isValidSum) 来复制 ViewModel。我试图消除这种冗余@http://jsfiddle.net/drdamour/5B8s4/,但视图无法绑定到已验证的Observable:
var viewModel = {
num1: ko.observable("50").extend({ number: true, min: 0, max: 100 }),
num2: ko.observable("50").extend({ number: true, min: 0, max: 100 })
};
var vm = ko.validatedObservable(viewModel).extend({ mustEqual: 101 });
ko.applyBindings(vm);
这可能是 KO 或 KO-Validation 的错误,或者我可能只是做错了。
所以问题是:在淘汰赛中确定 VM 是否针对跨 VM 的多个属性和层进行评估的条件有效的最佳方法是什么?
【问题讨论】:
标签: validation mvvm knockout.js knockout-validation