2014-02-05 20 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 d。我想知道驗證規則是否有效。在這個例子中,只有當國家是'美國'時才需要州。所以,我正在尋找確定'onlyIf'條件的當前狀態的正確方法。 – Homer

+0

編輯答案。對不起,混淆 – XGreen

+0

是的,這是有效的,但我正在尋找由圖書館提供的現有財產。類似於'isValid'屬性,類似'isActive'似乎很有用。 '規則()[0] .condition()'在我的例子中爲我做,但它看起來像一個黑客。 – Homer