我有一个与此类似的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/
答案 0 :(得分:4)
您可以创建一个Knockout Custom Validator,只要数组中任何人物对象的 driverId 属性发生变化,就会检查整个人员阵列。 Validator将根据匹配返回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文本框值以检查验证)