首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Knockout-Validation验证特定子项

如何使用Knockout-Validation验证特定子项
EN

Stack Overflow用户
提问于 2021-04-17 03:04:28
回答 1查看 63关注 0票数 0

我使用Knockout- validation的sample,并添加了包含验证规则的2个子集合。

代码语言:javascript
复制
var Item = function(id, name) {
  var self = this;
  self.id = ko.observable(id).extend({required: {message: 'item id required'}});
  self.name = ko.observable(name).extend(
  {
    minLength: {message :'item name must be at least 5 characters', params: 5}, 
    maxLength: 10
  });
   
   ko.validation.group(self, { live: true }); 
};

var itemsList = [new Item(1, 'test'), new Item(2, 'item 2'), new Item(0, '1')];

var viewModel = {
    items : ko.observableArray(itemsList),
    items2: ko.observableArray(itemsList),
    firstName: ko.observable().extend({minLength: 2, maxLength: 10}),
    lastName: ko.observable().extend({required: true}),
    emailAddress: ko.observable().extend({
        // custom message
        required: {
            message: 'Please supply your email address.'
        }
    }),
    age: ko.observable().extend({min: 1, max: 100}),
    location: ko.observable()
};

使用

代码语言:javascript
复制
ko.validation.group(viewmodel, { deep: true });

我的子集合正确显示验证消息,但我只希望验证一个子集合。documentation说要传递我想要验证的项,如下所示:

代码语言:javascript
复制
ko.validation.group([viewModel.firstName, viewModel.lastName, viewModel.items]);

但是当我这样做时,子集合不再显示验证消息。

要复制,请转到上面链接的示例,然后单击提交。两个组中的项目0和项目2都将具有验证消息。变化

代码语言:javascript
复制
viewModel.errors = ko.validation.group(viewModel, {deep: true});

代码语言:javascript
复制
viewModel.errors = ko.validation.group([viewModel.lastName, viewModel.items]);

再次运行并单击submit。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-20 00:04:12

创建ViewModel时:

代码语言:javascript
复制
 var itemsList = [new Item(1, 'test'), new Item(2, 'item 2'), new Item(0, '1')];
 
 var viewModel = {
     items : ko.observableArray(itemsList),
     items2: ko.observableArray(itemsList),

您在两个可观察数组中共享相同的可观察对象,即itemsitems2

您可以通过添加新的可观察对象来解决它(我添加了itemsList2,然后使用它来初始化items2):

代码语言:javascript
复制
 var itemsList = [new Item(1, 'test'), new Item(2, 'item 2'), new Item(0, '1')];
 var itemsList2 = [new Item(1, 'test'), new Item(2, 'item 2'), new Item(0, '1')]; <---
 
 var viewModel = {
     items : ko.observableArray(itemsList),
     items2: ko.observableArray(itemsList2), <---
     ...
 };

最后,您需要在下面的句子中添加{deep: true}

代码语言:javascript
复制
viewModel.errors = ko.validation.group([viewModel.lastName, viewModel.items], {deep: true});

下面是一个fiddle示例,以及完整的ViewModel。

代码语言:javascript
复制
var Item = function(id, name) {
  var self = this;
  self.id = ko.observable(id).extend({required: {message: 'item id required'}});
  self.name = ko.observable(name).extend(
  {
    minLength: {message :'item name must be at least 5 characters', params: 5}, 
    maxLength: 10
  });
   
   ko.validation.group(self, { live: true }); 
};

var itemsList = [new Item(1, 'test'), new Item(2, 'item 2'), new Item(0, '1')];
var itemsList2 = [new Item(1, 'test'), new Item(2, 'item 2'), new Item(0, '1')];

var viewModel = {
    items : ko.observableArray(itemsList),
    items2: ko.observableArray(itemsList2),
    firstName: ko.observable().extend({minLength: 2, maxLength: 10}),
    lastName: ko.observable().extend({required: true}),
    emailAddress: ko.observable().extend({
        // custom message
        required: {
            message: 'Please supply your email address.'
        }
    }),
    age: ko.observable().extend({min: 1, max: 100}),
    location: ko.observable()
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67130863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档