2013-02-20 37 views

回答

4

該道具呃語法使用onlyIf選項的規則是:

newNoteText: ko.observable().extend({ 
    required: { 
    onlyIf: function(){ 
     return someFlagIsTrue; 
    } 
    } 

參考this answer作爲你之前的一個問題(Eric Barnard,Knockout Validation的主要貢獻者)。


關於你的代碼,除了淘汰賽驗證的語法,還有其他兩件事情發愁:

  1. return something == true是一樣的return something(不提處理===== JavaScript的方式運營商,看到更多關於這個here)。

  2. 在你的函數中,this的值不是你認爲它的值(這裏指的是extend()括號之間的參數)。

如果您要訪問您的視圖模型的另一觀測的一個值,你應該做的是這樣的:

newNoteText: ko.observable().extend({ 
    required: { 
    onlyIf: function(){ 
     return self.ShowNote(); 
    } 
    } 

當自我在您的視圖模型的頂部定義構造函數,如var self = this;。看到更多關於這種模式here

+0

嘗試與param沒有工作。我將嘗試創建一個示例。 – jmogera 2013-02-27 05:05:06

+0

這裏是例子。我完全按照我的項目創建測試項目:https://skydrive.live.com/redir?resid=33048714B5BF3B4B!2027 – jmogera 2013-03-01 14:01:02

0

通過ThibWeb提到不需要params選項 - knockout.validation.js設置此默認爲true在addExtender方法:

if (params.message || params.onlyIf) { 
    return ko.validation.addRule(observable, { 
    rule: ruleName, 
    message: params.message, 
    params: utils.isEmptyVal(params.params) ? true : params.params, 
    condition: params.onlyIf 
}); 

的埃裏克·巴納德的答案是在2011年,大概在此之前是默認爲真。

但是,如果你的代碼設置任何驗證默認值,你可能會寫一個必要的HTML5屬性到HTML,或讀取在HTML設置一個:

ko.validation.configure({ 
    parseInputAttributes: true, //default is false 
    writeInputAttributes: true //default is false 
}); 

我發現這會導致僅當需要的條件被有效忽略時,因爲您正在添加總是應用的額外必需規則。