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

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

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

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

Вот ссылка Jsfiddle

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

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

 var data = { name: null, email: "[email protected]" };

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

person Sai    schedule 16.01.2014    source источник


Ответы (1)


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

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

var data = { name: "Joe Shmo", email: "[email protected]" };

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/

person Lee Bailey    schedule 16.01.2014
comment
Спасибо Ли .. это обходной путь. Я думал, что есть правильный способ справиться с этим, или я делал что-то не так. Я проверяю документацию, скоро сообщу о любых выводах. - person Sai; 17.01.2014