2013-04-30 70 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,当我第一次开始使用这个插件时,它让我走上了正确的轨道。