2012-11-15 28 views
8

私はアイテムの検証でko.observableArraysを持っています。ユーザーはアイテムを削除済みとしてマークすることができます。削除済みとマークされている場合は、そのアイテムの検証を無効にする必要があります。ノックアウト検証無効化の有効化

どのように検証を動的に無効にしますか?

例:(積極的な開発とブランチザッツ)検証のノックアウト-Contribのバージョンでは有効ではありません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

更新 旧答え

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

使用onlyIfオプションlike

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

関連する問題