Knockout-Validation validatedObservable всегда действителен, когда требуется использование: {onlyIf:}

Я использую Knockout-Validation в своем проекте. У меня есть модель, в которой мне нужно убедиться, что детали предоставлены, если на вопрос ответили «да»:

function Model() {
    'use strict';
    var self = this;
    self.question1 = ko.observable(false);
    self.question1Details = ko.observable('');
    self.question1Details.extend({
        required: {
            onlyIf: function () { 
                return self.question1() === true;
            }
        }
    });
}

Чем я использую это так:

var model = ko.validatedObservable(new Model());

Но что бы я ни делал, model.isValid() всегда верен. Даже если model().question1Details.isValid() имеет значение false.

Я попытался указать

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

Но это не помогло.

Интересно, если я изменю правило проверки на:

self.question1Details.extend({
            required: true
            }
        });

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


person Alex Lapa    schedule 12.03.2014    source источник
comment
Вы когда-нибудь догадывались об этом? Я занимаюсь этим сейчас.   -  person maccettura    schedule 09.01.2017


Ответы (1)


var self=this;
self.question1 = ko.observable(false);
self.question1Details = ko.observable('');
self.question1Details.extend({
    required: {
        onlyIf: function () { return self.question1()===true;}
     }
});

Демонстрация скрипта

person Akhlesh    schedule 12.03.2014
comment
Извините, эта скрипка не работает. Но вроде ответ. Но почему это ложно, если я хочу, чтобы это поле было обязательным, только если ответ на мой вопрос верен? Я не понимаю. - person Alex Lapa; 12.03.2014
comment
На самом деле нет, это не совсем работает. Теперь это просто всегда недействительно. - person Alex Lapa; 12.03.2014
comment
извините за мою ошибку, я обновил скрипку, и теперь она работает как положено. - person Akhlesh; 13.03.2014