2013-04-01 3 views
1
расслоения плотной

Я начал использовать KNOCKOUT с валидациями расслоения плотной http://ericmbarnard.github.com/Knockout-Validation/ двигателя проверкой, и я не ясно, как сделать следующее:как? с KNOCKOUT Validations

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

});

Заранее за вашу помощь.

EDIT: Я видел, что я могу установить конфигурацию проверки следующим образом: 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. В этом validationOptions могут выполнить эту работу за вас.

Обновление: вот скрипка, которая демонстрирует использование связывания 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 sure, пожалуйста, проверьте обновленный ответ и скрипку, и дайте мне знать, есть ли какие-либо дальнейшие запросы. – gaurav