2013-06-15 9 views

Trả lời

32

Bạn có thể loại bỏ tất cả các xác nhận liên quan thuộc tính tạo thành một quan sát mà đã được thêm vào bằng cách xác nhận ko có cách gọi:

myObservable.extend({validatable: false}); 

Hoặc nếu bạn chỉ muốn loại bỏ các xác nhận cần thiết bạn có thể gỡ bỏ nó từ bộ sưu tập rules :

myObservable.rules.remove(function (item) { 
     return item.rule == "required"; 
    }); 
} 

Demo JSFiddle.

Nhưng xác nhận ko có hỗ trợ cho conditional validation, vì vậy bạn có thể chỉ định một số điều kiện khi xác nhận sẽ làm việc như vậy có lẽ đây là những gì bạn cần:

myObservable.extend({ 
    required: { 
     message: "Some message", 
     onlyIf: function() { return //some condition; } 
    } 
}); 
+0

onlyIf là chính xác những gì tôi cần, nhưng làm thế nào về những gì tôi hỏi về loại bỏ các extender? Được hỗ trợ bởi loại trực tiếp? –

+2

Không, bạn không thể loại bỏ bộ mở rộng trừ khi bản thân bộ mở rộng cung cấp cách "hoàn nguyên" các thay đổi của chính nó. Trong trường hợp không xác thực 'myObservable.extend ({validatable: false});' gọi chính xác thì nó sẽ loại bỏ tất cả các công cụ xác thực liên quan đã được thêm vào bởi '.extend ({required: true});' hoặc bất kỳ quy tắc nào khác. – nemesv

+0

myObservable.rules.remove .. tốt nhất! – JMGH

2

nemesv câu trả lời làm việc với một sự điều chỉnh typo nhỏ - chức năng trong phương thức remove (...) cuộc gọi phải trả lại một giá trị boolean (ví dụ: '==' thay vì '='):

myObservable.rules.remove(function(item) { 
    return item.rule == "required"; 
}); 

Demo: JSFiddle