2012-11-15 193 views
8

我有ko.observableArrays驗證項目。用戶可以將項目標記爲已刪除。當它被標記爲已刪除時,我需要禁用該項目的驗證。Knockout驗證禁用驗證

如何動態禁用驗證?

例子:http://jsfiddle.net/3RZjT/2/

<div data-bind="foreach: names"> 
    <input data-bind="value: name, valueUpdate: 'afterkeydown'" /> <a data-bind="click: deleteMe, text:deleted()?'undelete':'delete'" href="#">delete</a><br/> 
</div> 

function Person(name){ 
    var self = this; 
    self.name = ko.observable(name).extend({ required: true}); 
    self.deleted = ko.observable(false); 
    self.deleteMe = function(){ 
     self.deleted(!self.deleted()); 
     self.deleted.extend({ validatable: !self.deleted()}); 
    }; 
} 

var viewModel = { 
    names: ko.observableArray([new Person("Ken"), new Person("")]) 
}; 

ko.applyBindings(viewModel); 
+1

請提供您當前的代碼。 – Tomalak

+0

我並沒有嘗試過,因爲我不知道該怎麼嘗試。我已使用@Anders答案更新了一個示例,但它對我無效。 – Homer

+0

你應該在'deleteMe'函數中寫'self.name.extend({validatable:!self.deleted()});'。 – nemesv

回答

9

更新 舊的答案無效驗證的敲除的Contrib版本(這就是用積極的發展分支)

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

使用onlyIf選項如

this.enable = ko.observable(true); 
this.required = ko.observable().extend({ required: { onlyIf: this.enable } }); 

老答案

嘗試

this.property.extend({ validatable: false }); // disables all validation for property 

this.property.extend({ required: false }); // disables required validation for property 
+0

它沒有工作。我用一個例子和jsFiddle更新了我的問題。 – Homer

+0

申請一張票,它應該工作https://github.com/ericmbarnard/Knockout-Validation/issues/101 – Anders

+0

Opps,我的代碼中的一個錯誤。如果解決了它,它現在將被禁用,但它不會重新啓用。 – Homer