Невозможно проверить пользовательскую группу с помощью Knockout Validation

Я не могу понять, как получить плагин Knockout Validation для проверки пользовательского выбора свойств модели представления . Однако я могу вызвать isValid() для успешной проверки всей модели представления.

Я следил за документацией, изложенной здесь, которая охватывает сценарий, а также проверил все ответы, которые я могу найти о переполнении стека.

Мой код выглядит так:

function MyViewModel() {
    var self = this;

    self.myproperty = ko.observableArray().extend({ minLength: { message: 'You must specify at least one item.'} })
    self.anotherproperty = ko.observable().extend({ required: { params: true, message: 'You must supply a value.'} });

    self.IsEntireModelValid = function() {
         if (!self.isValid()) {
               self.errors.showAllMessages();
               return false;
         }
         else {
              return true;
    }

    self.IsAnotherPropertyValidOnly = function() {
         var errors = ko.validation.group(self.anotherproperty);
         if (errors.length > 0) {
            errors.showAllMessages();
            return false;
         } 
         else {
            return true;
         }
    }

Когда я вызываю self.IsAnotherPropertyValidOnly(), переменная ошибок не содержит ошибок, но когда я вызываю self.IsEntireModelValid(), я получаю правильный ответ.

Может ли кто-нибудь указать, что я делаю неправильно?


person RNDThoughts    schedule 17.07.2014    source источник


Ответы (1)


Вам нужно использовать errors().length.

self.IsAnotherPropertyValidOnly = function() {
     var errors = ko.validation.group(self.anotherproperty);
     if (errors().length > 0) {
        errors.showAllMessages();
        return false;
     } 
     else {
        return true;
     }
}

http://jsfiddle.net/WY7V3/2/

person Wayne Ellery    schedule 17.07.2014
comment
Я подумал, что это может быть так, поскольку ошибки действительно являются функцией, но когда я пытаюсь это сделать, нокаут выдает превышение максимального размера стека вызовов. Похоже, где-то в моем коде есть рекурсивный цикл? Однако ваша скрипка работает отлично. - person RNDThoughts; 18.07.2014