2014-02-05 5 views
0

Используя пример из https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Conditional-Validation-with-onlyIf-parameterКак вы определяете, включено ли правило?

Правило определяется как:

self.state = ko.observable().extend({ 
    required: { 
     onlyIf: function() { 
      return self.country() === 'US'; 
     } 
    } 
}); 

Оказывается, что делать state.rules()[0].condition() сообщит вам, если правило активно, но он не чувствует, как правильно делать Это.

Вот рабочий пример: http://jsfiddle.net/LYP5u/64/

ответ

0

Ваше правило действует, если ваше правило проверки является истинным, так что вы могли бы попробовать это решение:

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

+0

Я не хочу знать, является ли свойство vali д. Я хочу знать, активно ли правило проверки. В этом примере состояние требуется только в том случае, если страна является «США». Итак, я ищу правильный метод для определения текущего состояния условия «onlyIf». – Homer

+0

Отредактирован ответ. Извините за путаницу – XGreen

+0

Да, это работает, но я искал существующее имущество, предоставляемое библиотекой. Подобно свойству 'isValid', что-то вроде' isActive' представляется полезным. 'rules() [0] .condition()' делает это для меня в моем примере, но это похоже на хак. – Homer

Смежные вопросы