2012-11-15 36 views
8

Mam ko.observableArrays z walidacji na elementy. Użytkownik może oznaczyć element jako usunięty. Kiedy jest oznaczony jako usunięty, muszę wyłączyć sprawdzanie poprawności tego elementu.Sprawdzanie poprawności sprawdzania poprawności Knockout sprawdzanie poprawności

Jak dynamicznie wyłączyć sprawdzanie oryginalności?

Przykład: 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

Proszę podać aktualny kod. – Tomalak

+0

Naprawdę nie mam żadnej próby, ponieważ nie wiem, co spróbować. Zaktualizowałem przykład przy użyciu odpowiedzi @Anders, ale nie zadziałało to dla mnie. – Homer

+0

Powinieneś napisać 'self.name.extend ({validatable:! Self.deleted()});' w swojej funkcji 'deleteMe'. – nemesv

Odpowiedz

9

Aktualizacja Old odpowiedź nie dotyczy wersji Knockout-Contrib walidacji (Ów gałęzi z aktywnego rozwoju)

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

Użyj onlyIf opcja taka jak

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

Old odpowiedź

Spróbuj

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

lub

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

To nie zadziałało. Zaktualizowałem moje pytanie za pomocą przykładu i jsFiddle. – Homer

+0

Złóż bilet, powinien działać https://github.com/ericmbarnard/Knockout-Validation/issues/101 – Anders

+0

Opps, błąd w moim kodzie. Jeśli go naprawisz i teraz się wyłączy, ale nie będzie można go ponownie włączyć. – Homer

Powiązane problemy