2

我有一个类似于这个的 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/

4

1 回答 1

4

您可以创建一个Knockout 自定义验证器,只要数组内任何人员对象的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']
   }
});
... 
....

演示小提琴 (更改 driverId 文本框值以检查验证)

于 2013-04-14T04:04:01.183 回答