2013-07-29 97 views
12

我有一個視圖模型爲這樣:清除或重置knockout驗證validatedObservable?

var prop1 = ko.observable().extend{ required: true }, 
    prop2 = ko.observable().extend{ required: true }; 

var validation = ko.validatedObservable([prop1, prop2]); 

function resetFields() { 
    prop1(undefined); 
    prop2(undefined); 
} 

var vm = { 
    prop1: prop1, 
    prop2: prop2, 
    validation: validation, 
    reset: resetFields 
}; 

性質PROP1和PROP2正在通過validatedObservable正確驗證,但是當我執行resetFields,這些屬性然後對他們的錯誤,因爲他們已經被修改,是必要的。

是否有重置驗證的observable的方法,就好像它沒有被更改過?

更新:我是從採購的NuGet knockout.validation,並使用1.0.1版

回答

14

不能重置在validatedObservable水平,但你可以調用各個屬性clearError

vm.reset(); 
console.log(vm.validation.isValid()); // output: false 
prop1.clearError(); 
prop2.clearError(); 
console.log(vm.validation.isValid()); // output: true 

演示JSFiddle.

注意:它只適用於「近期」版本的v alidation插件,所以clearError不包括在CDNJS和Nuget版本的插件。我的JSFiddle演示使用GitHub的最新版本(9fd5a4d2da)。

9

當使用驗證的observable時,我發現在清除observable後可以調用validatedObservable.errors.showAllMessages(false),這與我在應用程序中期望的方式相同。

+4

此解決方案可以工作,但不是在所有情況下:'showAllMessages(false)'只將isModied的可觀測值設置爲false,導致錯誤消息被移除,但是它不會清除驗證結果**。所以'isValid()'將保持爲'false':'vm.reset(); console.log(vm.validation.isValid()); //輸出:false vm.validation.errors.showAllMessages(false) console.log(vm.validation.isValid()); //輸出:false' http://jsfiddle.net/CjsCS/ – nemesv