2012-11-15 2 views
8

Ich habe ko.observableArrays mit Validierung für die Elemente. Der Benutzer kann ein Element als gelöscht markieren. Wenn es als gelöscht markiert ist, muss ich die Validierung für dieses Element deaktivieren.Knockout Validierung deaktivieren Validierung

Wie wird die Validierung dynamisch deaktiviert?

Beispiel: 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

Sie bitte Ihre aktuellen Code enthalten. – Tomalak

+0

Ich habe wirklich keinen Versuch, weil ich nicht weiß, was ich versuchen soll. Ich habe ein Beispiel mit @Anders Antwort aktualisiert, aber es hat nicht für mich funktioniert. – Homer

+0

Sie sollten 'self.name.extend ({validatable:! Self.deleted()});' in Ihrer 'deleteMe' -Funktion schreiben. – nemesv

Antwort

9

aktualisieren Alte Antwort nicht gültig für die K.-o.-Contrib-Version Validation (Das ist der Zweig mit der aktiven Entwicklung)

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

Verwenden Sie die onlyIf Option wie

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

Alte Antwort

Versuchen

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

oder

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

Es hat nicht funktioniert. Ich habe meine Frage mit einem Beispiel und jsFiddle aktualisiert. – Homer

+0

Datei ein Ticket, sollte es funktionieren https://github.com/ericmbarnard/Knockout-Validation/issues/101 – Anders

+0

Opps, ein Fehler in meinem Code. Wenn es behoben wurde, wird es jetzt deaktiviert, aber es wird nicht wieder aktiviert. – Homer