Проверка нокаута после картирования
Я новичок в нокауте, поэтому, пожалуйста, потерпите меня.
Я пытаюсь использовать плагин сопоставления для сопоставления данных 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);