2013-04-04 50 views
1

說我有以下屬性的模型:淘汰賽自定義的驗證問題

function ViewModel() { 
    this.SetupTime = ko.observable(); 
    this.CloseTime = ko.observable(); 
    this.MinHrs = ko.observable(); 
} 

我需要添加一個驗證規則,使MinHrs>(SetupTime + CloseTime)。只要三個字段中的一個被更改,這個驗證就會觸發。我知道我必須寫一個自定義的驗證這一點,例如:

ko.validation.rules['ValidWorkRange'] = { 
    validator: function (val, setuptime, closetime, minhrs) { 
     return minhrs > (setuptime+closetime); 
    }, 
    message: '(Shift End - Shift Start) >= Shortest Work Segment' 
}; 

我不知道我做了什麼有正確的,也不清楚如何調用內可觀察此驗證。

有人可以幫我嗎? 在此先感謝

回答

2

是你的權利,你應該創建一個custom validation來實現自己的目標。而且您無需調用驗證函數,只要相關的依賴項(可觀察項)發生更改,它就會自動調用。

Wroking Fiddle

注意:請申請數量一樣的其他必要的驗證等等。因爲如果你在任何輸入字段中的小提琴代碼比結果輸入文本可能是一個錯誤。

下面是自定義驗證碼:

var ValidWorkRange = function(val, param) 
{ 
    if(val && param){ 
    var minHrs = parseInt(val, 10); 
    var setupTime = parseInt(param[0](), 10); 
    var closeTime = parseInt(param[1](), 10); 
    return minHrs > (setupTime+closeTime); 
    } 
}; 

而且這樣你可以把它在你觀察到的:

function ViewModel() { 
    var self = this; 

    self.SetupTime = ko.observable(); 
    self.CloseTime = ko.observable(); 
    self.MinHrs = ko.observable().extend 
    ({ 
     validation: { 
     validator: ValidWorkRange, 
     message: 'Not valid.', 
     params: [self.SetupTime, self.CloseTime] 
     } 
    }); 
} 
+0

嗨,這很好,謝謝。最近你一直在幫我很多:)無論如何,我仍在努力使用自定義模板正確顯示錯誤消息。我在這裏解釋過。 http://stackoverflow.com/questions/15802620/knockout-validation-issue-with-custom-message-tempalate如果你能幫助,很感激。謝謝 – devC 2013-04-04 13:12:09

1

我不知道這麼多關於KO驗證,但也許它可以是有用的爲您

https://github.com/ericmbarnard/Knockout-Validation

+0

我的確遵循了這一文件,發現了很多的幫助,在那裏,但不幸的是對於這種特殊場景沒有幫助。 – devC 2013-04-04 11:16:42