Проверка нокаута после картирования

Я новичок в нокауте, поэтому, пожалуйста, потерпите меня.

Я пытаюсь использовать плагин сопоставления для сопоставления данных Json, полученных с сервера, с существующим экземпляром viewModel. Я могу сделать это без каких-либо проблем. Но в моей viewModel я использовал плагин проверки, поэтому, как только я сопоставляю данные и связываю их с пользовательским интерфейсом, проверка запускается, и она сразу отображает информацию об ошибке.

Есть ли способ не отображать это сообщение об ошибке, пока не будет нажата кнопка "Отправить". Или я что-то не так делаю?

Вот ссылка Jsfiddle

По какой-то причине SO не позволяет мне задавать этот вопрос, если не сопровождается кодом, поэтому вот код javascript, скопированный из jsfiddle -

 ko.validation.configure({
      parseInputAttributes: true
 });

 var data = { name: null, email: "joe@shmo.com" };

 function vm(){
   this.name = ko.observable().extend({required:true});
   this.email = ko.observable().extend({required:true});
   this.validationCheck = ko.validatedObservable(this);
 }


 var viewModel = ko.mapping.fromJS(data, {}, new vm());
 ko.applyBindings(viewModel);

1 ответ

Один из подходов, который вы можете попробовать, - это сначала скрыть все проверочные сообщения, а затем добавить функцию в вашу модель представления, которая показывает их снова. Затем вы вызываете эту функцию при нажатии кнопки отправки.

    ko.validation.configure({
    parseInputAttributes: true
});

var data = { name: "Joe Shmo", email: "joe@shmo.com" };

var validationMapping = {
    'name': {
        create: function(options) {
            return ko.observable(options.data).extend({required: true});
        }
    }
}

var viewModel = ko.validatedObservable(ko.mapping.fromJS(data, validationMapping));

viewModel().showValidation = function()
{
    $$('.validationMessage').set('style', 'display:inline');
    return viewModel.isValid();
}
ko.applyBindings(viewModel);

демо: http://jsfiddle.net/bS62w/3/

Другие вопросы по тегам