2013-04-30 80 views
1

知道的文章中,我使用淘汰賽和project Knockout-Validation 似乎添加驗證的好方法,但我不能得到它的工作。有誰在淘汰賽驗證

有誰知道已寫入它的任何好文章?

的例子是有點混亂一樣,確實包含觀測必須是validatedObservable,如果沒有,你怎麼驗證的東西你的主要對象。然後在配置示例中有一行表示ko.applyBindingsWithValidation,但在其他地方沒有提及。

我真正希望做的是有確實可觀察到的陣列上一個foreach視圖。每個項目都會有自己的保存按鈕,需要驗證。

感謝

+0

您應可觀察到的陣列內張貼的對象的示例代碼。從那裏我可以爲你寫一個更具體的例子。 – 2013-04-30 07:29:41

回答

1

這裏有一個簡單的方法來實現自己的目標:

首次設置進行驗證的配置以及與此TID位啓用它:

ko.validation.init({ 
     grouping: { deep: true, observable: false } 
    }); 

現在您可以使用其他配置選項,因爲您認爲合適HERE。因爲如果你想你的對象(其中可能有潛在的嵌套/分層)遞歸遍歷並確定所有對象中它是有效的,重要的,我只提grouping選項。

然後我一般使用以下方法來驗證我的模型 - 我利用一個分組的功能,像這樣:

var myModel = { 
    Id: 0, 
    FirstName: ko.observable('').extend({ required: true }), 
    LastName: ko.observable('').extend({ required: true }), 
    DateOfBirth: ko.observable('').extend({ date: true }), 
    Errors: ko.validation.group(this), 
    isValid: ko.computed(function() { 
     return this.Errors.length == 0; 
    }); 
}; 

或使用功能聲明的方法:

function myModel() { 
    var self = this; 
    self.Id = 0; 
    self.FirstName = ko.observable('').extend({ required: true }); 
    self.LastName = ko.observable('').extend({ required: true }); 
    self.DateOfBirth = ko.observable('').extend({ date: true }); 

    self.Errors = ko.validation.group(self); 

    self.isValid = ko.computed(function() { 
     return this.Errors.length == 0; 
    }); 
}; 

ko.validation.group(obj)是這種方法的關鍵。此函數將遞歸遍歷傳入的對象並標識其中的每個validatable對象。然後它將它們封裝到validatedObservable中,結果是一個observableArray,它填充了驗證失敗的驗證器生成的錯誤消息。

所以現在我們可以寫一個保存功能,像這樣,在按鈕接收模式或者如果你喜歡來定義對象本身,那也有用內保存方法:

var parentModel = { 
    Save: function(model) { 
     if (model.isValid()) 
     //perform save 
     else { 
     //do whatever 
     //forces all error msgs associated to display in UI 
     model.Errors.showAllMessages(); 
     } 
    } 
}; 

確保在調用ko.validation.init()後執行ko.applyBindings(model),並且您的模型已準備好驗證器

希望這能爲您提供一些幫助您開始的東西!這是一個comprehensive example,當我第一次開始使用這個插件時,它讓我走上了正確的軌道。