有没有人知道关于淘汰赛验证的文章

时间:2013-04-30 07:03:23

标签: validation knockout.js knockout-validation

我正在使用Knockout和project Knockout-Validation 似乎是添加验证的好方法,但我无法让它工作。

有没有人知道任何写在上面的好文章?

这些示例有点令人困惑,例如,包含observable的主对象是否必须是validatedObservable,如果不是,您如何验证这些内容。然后在配置示例中有一行说ko.applyBindingsWithValidation但在其他地方没有提到。

我真正想做的是拥有一个可观察数组的视图。然后每个项目都有自己的保存按钮,需要验证。

由于

2 个答案:

答案 0 :(得分:1)

这是实现目标的简单方法:

首先设置验证配置并使用此tid位启用它:

    ko.validation.init({
        grouping: { deep: true, observable: false }
    });

现在您可以根据需要使用其他配置选项HERE。我只提到了grouping选项,因为如果你希望你的对象(可能是嵌套/分层的)以递归方式遍历并识别其中的所有对象都是有效的,这一点至关重要。

然后我通常使用以下方法来验证我的模型 - 我利用了这样的分组函数:

var myModel = { 
    Id: 0,
    FirstName: ko.observable('').extend({ required: true }),
    LastName: ko.observable('').extend({ required: true }),
    DateOfBirth: ko.observable('').extend({ date: true }),
    Errors: ko.validation.group(this),
    isValid: ko.computed(function() {
        return this.Errors.length == 0;
    });
};

或使用功能声明方法:

function myModel() {
    var self = this;
    self.Id = 0;
    self.FirstName = ko.observable('').extend({ required: true });
    self.LastName = ko.observable('').extend({ required: true });
    self.DateOfBirth = ko.observable('').extend({ date: true });

    self.Errors = ko.validation.group(self);

    self.isValid = ko.computed(function() {
        return this.Errors.length == 0;
    });
};

ko.validation.group(obj)是这种方法的关键。此函数将递归遍历传入的对象并标识其中的每个可验证对象。然后它将它们包装到validatedObservable中,结果是一个observableArray,其中填充了验证失败的任何验证器生成的错误消息。

所以现在我们可以编写一个这样的保存函数,其中按钮接收模型,或者如果您更喜欢在对象本身中定义save方法,那也可以:

var parentModel = {
   Save: function(model) {
      if (model.isValid())
         //perform save
      else {
         //do whatever
         //forces all error msgs associated to display in UI
         model.Errors.showAllMessages(); 
      }
   }
};

确保在调用ko.applyBindings(model)并且您的模型已准备好验证器后执行ko.validation.init()

希望这能为您提供一些帮助您入门的东西!这是一个comprehensive example,当我第一次开始使用这个插件时,它让我走上正轨。

答案 1 :(得分:0)