2016-05-27 40 views
0

我使用的是Knockout Validation,我真的很努力讓我的表單上的字段只在我調用整個模型的保存後才被驗證。在用戶通過表單的時候,如果他們輸入了一個無效值,那麼錯誤將立即顯示在模糊處。Knockout驗證 - 如何在保存整個模型後驗證可觀察性

我希望在點擊我的保存按鈕後才顯示它,然後在用戶進行更改後重新評估每個字段。

下面我的模型縮小版本。

var model = ko.validatedObservable({ 
    sellingPrice: ko.observable().extend({ 
     min:0 
    }) 
}); 

function Save(){ 
    if(!model.isValid()){ 
     if (model.errors().length > 0) { 
      model.errors.showAllMessages(true); 
     } 
     return false; 
    } else { 
     //save the model 
    } 

} 

是否有標誌的地方我應該設置,直到整個模型已經在我保存的方法進行了驗證推遲驗證?

+0

http://stackoverflow.com/questions/25770933/knockout-validation-dont-validate-input-when-empty-evaluate-when-submit/26740724#26740724 – Derpy

+0

http://stackoverflow.com/questions/36084721 /敲除驗證,如何對驗證這領域上鍵式點擊不上輸入-CH – Derpy

回答

1

您可以嘗試使用一個驗證組:

看看這個小提琴我寫的,我還沒有測試它,但它應該給你它是如何工作的想法。

https://jsfiddle.net/xggu9Lv2/47/

var ViewModel = function() { 

    var self = this; 

    // Declare 
    self.sellingPrice = ko.observable(null); 
    self.otherThing = ko.observable(null); 
    self.anotherThing = ko.observable(null); 
    self.Validator = ko.observable(null); 

    // Set validation rules 
    self.setValidation(); 

    self.setValidation = function() { 

    self.sellingPrice.extend({ 
     min: 0 
    }) 

    self.otherThing.extend({ 
     required: true 
    }) 

    self.anotherThing.extend({ 
     required: true 
    }) 

    //Validation group 
    self.FieldValidator = ko.validation.group({ 
     sellingPrice: self.sellingPrice, 
     otherThing: self.otherThing, 
     anotherThing: self.anotherThin 
    }); 

    } 

    self.save = function() { 
    // Check the length of the validation group 
    if (!this.Validator().length) { 
     // All is OK! 
    } 
    } 


}; 

ko.applyBindings(new ViewModel()); 
0

我不得不多看一眼你的代碼,看看是如何被使用的驗證,但我看着the docs我認爲,所有你需要做的是在密切關注更多你如何渲染驗證錯誤。

你應該能夠用一個可見性或隱藏的綁定封裝你的錯誤的div,這個綁定綁定到你在save方法中顯式設置的其他observable,並且驗證失敗。

另一種選擇是創建您自己的驗證對象,以暴露您自己的綁定到的錯誤觀察值。我們在那裏工作 - 評論你是否有興趣瞭解如何構建結構,我可以提供一個簡要的概述,但我認爲它有點笨重,這是離開KO驗證。