1

我已经开始使用带有http://ericmbarnard.github.com/Knockout-Validation/验证引擎的淘汰赛 js 验证,但我不清楚如何执行以下操作:

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

2) 我在正在验证的字段旁边触发了验证消息。我只想在该字段旁边显示一个“*”,并在页面底部的验证摘要字段中显示错误消息。所有验证错误都应显示在那里。怎么做?

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();

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

4

1 回答 1

3

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

对于这个 ko 验证包含一个本地规则。您可以执行以下操作:

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

2)。我在正在验证的字段旁边触发了验证消息..

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

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

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

3)。在通过表单验证之前要避免表单提交......

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

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

现在Errors属性包含了你的 observables 的错误信息,如果有的话。因此,在提交表单之前,您可以检查以下内容:

      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.
      }
于 2013-04-01T10:25:05.730 回答