2012-10-23 31 views
29

Tôi đang cố sử dụng plugin knockout.validation. Tôi đã tạo một exampleViewModel:Cách sử dụng hàm 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); 
}  

Trong mô hình chế độ xem trên, tôi đã tạo nhóm xác thực có tên lỗi cho đối tượng hiện tại. Bây giờ nếu bất kỳ quy tắc xác nhận nào không thành công trên bất kỳ thuộc tính nào trong số 4 thuộc tính lỗi này thì có chứa thông báo lỗi.

My question is, nếu tôi muốn tạo nhóm xác thực chỉ có 3 thuộc tính (P1, P2, P3) trong số 4 cách tôi có thể thực hiện việc này?

Trả lời

53

Điều này phù hợp với tôi. Thay vì nhóm trên this, hãy tạo đối tượng proxy chứa thuộc tính bạn muốn xác thực.

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

Nếu bạn làm điều này, hãy cân nhắc sử dụng validatedObservable thay vì group. Không chỉ bạn nhận được các lỗi, nhưng bạn có thể kiểm tra chung nếu tất cả các tài sản có giá trị sử dụng tài sản 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

sử dụng phương pháp này để gỡ lỗi Durandal Quan sát vấn đề xác nhận Plugin. 'this.errors = ko.validation.group ({P1: có thể quan sát được (this, 'P1')});' Tôi tin rằng nó đã phát hiện ra getter/setters và được phản ứng tương ứng, nhưng điều này ít nhất đã chứng minh việc xác thực hoạt động. – MrYellow

11

Như đã trình bày trong documentation đúng cách để xác nhận chỉ quan sát cụ thể là:

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

Từ tài liệu: > "Cũng lưu ý rằng tham số đầu tiên không cần phải là một mảng. Nếu bạn chỉ có một đối tượng, bạn có thể truyền nó vào như một đối tượng trần, mà không cần gói nó trong một mảng." –

+0

tks cho liên kết tài liệu! – Alex

Các vấn đề liên quan