我有一个与此类似的 ViewModel(简化版):
var Person = function(){
var self = this;
self.Name = ko.observable();
self.LastName = ko.observable();
self.DriverId = ko.observable();
}
var MainViewModel = function(){
var self = this;
self.People = ko.observableArray();
}
我需要验证驱动程序 ID 对于数组的每个元素都是唯一的。做这个的最好方式是什么?是否可以创建 MVC 属性?我找不到具体方法,因为我只针对特定类而不是集合执行此操作。
这是一个带有 ViewModel 的 JsFiddle:http://jsfiddle.net/amhedh/VgJ59/6/
最佳答案
您可以创建 Knockout Custom Validator每当数组内任何人员对象的 driverId 属性发生更改时,它将检查您的整个人员数组。验证器将根据匹配返回 true 或 false(如果发现重复条目,则返回 false,否则返回 true),进一步的 ko 验证将自动为您插入错误消息。
我创建了一个自定义验证器,它将为您完成这项工作。这是验证器:
var Unique = function(val, params)
{
var isValid = true;
ko.utils.arrayFirst(params[0](), function(item){
if(val === item[params[2]]() && item !== params[1])
{
isValid = false;
return true;
}
});
return isValid;
};
这是用法:
....
.....
self.DriverId = ko.observable(person.DriverId).extend
({
validation: {
validator: Unique,
message: 'DriverId is duplicate.',
params: [viewModel.People, self, 'DriverId']
}
});
...
....
Demo fiddle (更改 driverId 文本框值以检查验证)
关于asp.net-mvc - 防止 knockout 可观察数组上的重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15992615/