Проверка нокаута - Как проверять наблюдаемые только после сохранения всей модели

Я использую Knockout Validation, и я действительно изо всех сил пытаюсь заставить поля в моей форме проверять только после того, как я вызову save для всей модели. В тот момент, когда пользователь проходит через форму, если он вводит недопустимое значение, ошибка сразу же появляется при размытии.

Мне бы хотелось, чтобы он отображался только после того, как я нажал кнопку "Сохранить", а затем заново оценил каждое поле, когда пользователь вносит изменения после этого.

Ниже приведена уменьшенная версия моей модели.

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 ответа

Вы можете попробовать использовать группу проверки:

Посмотрите на эту скрипку, которую я написал, я не тестировал ее, но она должна дать вам представление о том, как она работает.

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());

Мне нужно взглянуть на ваш код, чтобы увидеть, как используется проверка, но, просматривая документы, я думаю, что все, что вам нужно сделать, - это более внимательно посмотреть, как вы отображаете ошибки проверки.

Вы должны быть в состоянии обернуть div, который включает в себя ваши ошибки, с видимостью или скрытой привязкой, которая связана с какой-то другой наблюдаемой, которую вы явно устанавливаете, когда находитесь в методе сохранения, и проверка не проходит.

Другой вариант - создать собственный объект проверки, который предоставляет свои собственные наблюдаемые ошибки, с которыми вы связываетесь. Мы делаем это там, где я работаю - комментируйте, если вам интересно посмотреть, как это структурировано, и я могу предоставить краткий обзор, но я считаю его немного громоздким, и это отступление от проверки КО.

Другие вопросы по тегам