淘汰验证 - 如何在保存整个模型后仅验证可观察量

时间:2016-05-27 15:09:36

标签: knockout.js knockout-validation

我正在使用Knockout Validation,我真的很难让我的表单上的字段只在我调用整个模型后保存才能验证。当用户通过表单时,如果他们输入无效值,则错误会立即显示在模糊上。

我想在我点击我的保存按钮后显示它,然后在用户进行更改后重新评估每个字段。

我的模型缩减版本。

var model = ko.validatedObservable({
    sellingPrice: ko.observable().extend({
        min:0
    })
});

function Save(){
   if(!model.isValid()){
      if (model.errors().length > 0) {
             model.errors.showAllMessages(true);
       }   
       return false;
   } else {
      //save the model
   }

}

在我的保存方法中验证整个模型之前,我应该设置哪个标志来延迟验证吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用验证组:

看看我写的这个小提琴,我没有测试过,但它应该让你知道它是如何工作的。

https://jsfiddle.net/xggu9Lv2/47/

var ViewModel = function() {

  var self = this;

  // Declare
  self.sellingPrice = ko.observable(null);
  self.otherThing = ko.observable(null);
  self.anotherThing = ko.observable(null);
  self.Validator = ko.observable(null);

  // Set validation rules
  self.setValidation();

  self.setValidation = function() {

    self.sellingPrice.extend({
      min: 0
    })

    self.otherThing.extend({
      required: true
    })

    self.anotherThing.extend({
      required: true
    })

    //Validation group
    self.FieldValidator = ko.validation.group({
      sellingPrice: self.sellingPrice,
      otherThing: self.otherThing,
      anotherThing: self.anotherThin
    });

  }

  self.save = function() {
    // Check the length of the validation group
    if (!this.Validator().length) {
      // All is OK!
    }
  }


};

ko.applyBindings(new ViewModel());

答案 1 :(得分:0)

我必须查看更多代码以了解验证的使用方式,但在查看the docs时,我认为您需要做的就是更仔细地查看渲染方式验证错误。

您应该能够使用可见性或隐藏绑定来包装包含错误的div,该绑定绑定到您在save方法中时显式设置的其他可观察对象,并且验证失败。

另一种选择是创建自己的验证对象,公开它绑定到的自己的错误可观察对象。我们在那里工作 - 评论你是否有兴趣了解它的结构,我可以提供一个简短的概述,但我认为它有点笨重,这与KO验证有所不同。