2013-04-01 101 views
1

我使用淘汰赛JS验证与http://ericmbarnard.github.com/Knockout-Validation/验证引擎开始,我并不清楚如何做到以下几点:如何?与淘汰赛JS验证

1)说我想设置一个特定的领域需要基于一个条件。我怎么做? 例如
this.Username = ko.observable()。extend({required:true}); //只有当this.UserType = 2等时,才能使所需的= true。

2)我已验证消息正在被验证的字段旁边。我只想在该字段旁边出现一个'*',并将错误消息显示在页面底部的validationsummary字段中。所有验证错误都应显示在那里。怎么做?

3)表单提交后才能避免,直到表单验证通过。现在,我收到验证错误消息,仍然提交表单。所以我想我做错了什么。以下是我的代码:

$(document).ready(function() { 
var model; 

// enable validation 
ko.validation.init(); 


$.ajax({ 
    type: "POST", 
    url: SERVER_PATH + '/jqueryservice/DataAccessService.asmx/GetData', 
    async: false, 
    data: "{ }", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (result, status) { 
     model = new ViewModel(result); 
     ko.applyBindings(model); 
    }, 
    error: GetDataError 

}); 

$('#submit').click(function() { 
    var data = ko.toJS(model); 
    delete data.Vehicles; 
    delete data.CopyWeeks; 
    delete data.SetupTotal; 
    delete data.CloseTotal; 

    var mappedItems = ko.utils.arrayMap(data.DailyItemList, function (item) { 
     delete item.Add; 
     delete item.Delete; 
     return item; 
    }); 
    data.DailyItemList = mappedItems; 

    $.ajax({ 
     type: "POST", 
     url: SERVER_PATH + '/jqueryservice/DataAccessService.asmx/ProcessData', 
     async: false, 
     data: ko.toJSON(data), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (result, stat) { 
      alert(success); 
      return false; 
     }, 
     error: function (e) { 
      alert(e); 
     } 
    }); 
}); 

});

在此先感谢您的帮助。

编辑: 我已经看到了,我可以设置验证配置如下: ko.validation.configure({ decorateElement:假的, errorMessageClass: 'ERRORMSG', insertMessages:假的, parseInputAttributes:真, messageTemplate:'sErrorMsg' }); ko.validation.init();

,但我不知道我该怎么定义我的错误信息模板 'sErrorMsg'

回答

3

1)。假设我想根据条件设置所需的特定字段....

对于此ko验证包含native rule。你可以这样做:

var myObj = ko.observable().extend({ required: { 
      onlyIf: function() { 
         //here you can place your codition and can return.. 
         //true or false accordingly 
        } 
      }}); 

2)。我已将验证消息发射到正在验证的字段旁边。

对此,您应该检查Validation Binding。在这个验证中,选项可以为你完成这项工作。

更新:这里是一个小提琴演示使用messageTemplate绑定根据您的要求。

http://jsbin.com/ocizes/3/edit

3)。表单提交将被避免,直到表单验证通过....

为此,您可以使用使用group,如:

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

现在错误属性包含您的观测量的错误信息,如果有的话。所以在提交表单之前,你可以放一些类似的东西:

 if(yourViewModel.Errors().length == 0) { 
     //submit the form 
     } 
     else { 
     yourViewModel.Errors.showAllMessages(); 

     //this line shows all the errors if validation fails, 
     //but you can omit this. 
     } 
+0

好的,我得到了1)和3)的工作。非常感谢。但2对我来说依然是个谜。我浏览了您链接的Github文档,但无法弄清楚如何使用它。你能举个例子吗?另外,yourViewModel.Errors.showAllMessages()会做什么?我无法得到这个工作。 – devC

+0

你能帮我解决这个问题吗? – devC

+0

yaa当然,请检查更新的答案和小提琴,并让我知道是否有任何进一步的疑问。 – gaurav