Ваше правило действует, если ваше правило проверки является истинным, так что вы могли бы попробовать это решение:
ko.validation.init();
function Address() {
var self = this;
self.availableCountries= ['AU', 'NZ', 'US'];
self.availableStates = ['Alabama', 'Alaska', 'Arizona', 'Arkansas'];
self.country = ko.observable().extend({required: true});
self.stateRule = function(){
return self.country() === 'US';
}
self.state = ko.observable().extend({
required: {
onlyIf: self.stateRule
}
});
self.errors = ko.validation.group(self);
};
var address = ko.validatedObservable(new Address())();
ko.applyBindings(address);
тест с этим шаблоном:
<p data-bind="text: stateRule()"><p>
<p data-bind="text: state.rules()[0].condition()"><p>
<div>
<label for="country">Country</label>
<select id="country" data-bind="options: availableCountries, value: country, optionsCaption: 'Choose...'"></select>
<div data-bind="visible: state.rules()[0].condition()">
<label for="state">State</label>
<select id="state" data-bind="options: availableStates, value: state, optionsCaption: 'Choose...'"></select>
</div>
</div>
Fiddle for this
Я не хочу знать, является ли свойство vali д. Я хочу знать, активно ли правило проверки. В этом примере состояние требуется только в том случае, если страна является «США». Итак, я ищу правильный метод для определения текущего состояния условия «onlyIf». – Homer
Отредактирован ответ. Извините за путаницу – XGreen
Да, это работает, но я искал существующее имущество, предоставляемое библиотекой. Подобно свойству 'isValid', что-то вроде' isActive' представляется полезным. 'rules() [0] .condition()' делает это для меня в моем примере, но это похоже на хак. – Homer