【问题标题】:Preventing duplicates on knockout observable array防止敲除可观察数组上的重复
【发布时间】:2018-06-13 14:33:11
【问题描述】:

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

【问题讨论】:

  • 你试过这些:123

标签: asp.net-mvc knockout.js


【解决方案1】:

您可以创建一个Knockout Custom Validator,只要数组内任何人员对象的 driverId 属性发生更改,它将检查您的整个人员数组。验证器将根据匹配返回真或假(如果发现重复条目​​将返回假,否则返回真),进一步的 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 文本框值以检查验证)

【讨论】:

    猜你喜欢
    • 2012-10-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2011-12-12
    • 2019-05-17
    • 2016-07-27
    相关资源
    最近更新 更多