2012-10-23 28 views
29

我正在嘗試使用knockout.validation插件。我創建了一個exampleViewModel:如何使用ko.validation.group函數

function exampleViewModel() { 
    this.P1 = ko.observable().extend({ required : true }); 
    this.P2 = ko.observable().extend({ required : true }); 
    this.P3 = ko.observable().extend({ required : true }); 
    this.P4 = ko.observable().extend({ required : true }); 

    this.errors = ko.validation.group(this); 
}  

在我創建驗證組命名錯誤當前對象上述視圖模型。現在,如果任何驗證規則在4個以外的任何一個屬性上失敗,則此錯誤屬性包含錯誤消息。

My question is,如果我想創建只有3個屬性(P1, P2, P3)的驗證組開出4比我該怎麼辦呢?

回答

53

這對我很好。而不是在this上進行分組,創建一個代理對象來保存您要驗證的屬性。

this.errors = ko.validation.group({ 
    P1: this.P1, 
    P2: this.P2, 
    P3: this.P3 
}); 

如果你這樣做,可以考慮使用的validatedObservable代替group。您不僅會得到錯誤,還可以使用isValid屬性共同檢查所有屬性是否有效。

this.validationModel = ko.validatedObservable({ 
    P1: this.P1, 
    P2: this.P2, 
    P3: this.P3 
}); 

// is the validationModel valid? 
this.validationModel.isValid(); 
// what are the error messages? 
this.validationModel.errors(); 
+0

用這種方法來調試迪朗達爾可觀察插件驗證問題。 'this.errors = ko.validation.group({P1:observable(this,'P1')});'我相信它應該檢測到getter/setter並作出相應的反應,但是這至少證明了驗證有效。 – MrYellow

11

documentation描述正確的方式來驗證只有特定的觀測是:

this.errors = ko.validation.group([this.P1, this.P2, this.P3]); 
+6

從文檔: >「還要注意,第一個參數不需要是數組,如果只有一個對象,則可以將它作爲裸露對象傳遞,而不將其包裝在數組中。」 –

+0

tks文檔鏈接! – Alex