如何?与淘汰赛js验证

时间:2013-04-01 08:55:03

标签: validation knockout.js required

我已经开始在http://ericmbarnard.github.com/Knockout-Validation/验证引擎中使用knockout js验证,我不清楚如何执行以下操作:

1)假设我想根据条件设置所需的特定字段。我怎么做? 例如
       this.Username = ko.observable()。extend({required:true}); // make required = true仅当this.UserType = 2,等等......

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:false,       errorMessageClass:'errorMsg',       insertMessages:false,       parseInputAttributes:true,       messageTemplate:'sErrorMsg'     });     ko.validation.init();

但我不确定如何定义我的错误消息模板's ErrorMsg'

1 个答案:

答案 0 :(得分: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);

现在 Errors 属性包含您的observable的错误消息(如果有)。因此,在提交表单之前,您可以检查以下内容:

      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.
      }