Я новичок в использовании нокаута, и я пытаюсь использовать плагин проверки нокаута вместе с плагином отображения. У меня проблема с функцией isValid на объекте модели представления. Согласно документации isValid должен вернуть bool, чтобы определить, действительно ли какая-либо из наблюдаемых в модели представления, но когда я ее вызываю, я получаю сообщение об ошибке, что isValid не является функцией. Однако, если я назову isValid на самих наблюдаемых, он отлично работает. Проблема в том, что я использую плагин сопоставления с некоторыми динамическими объектами данных, которые я получаю с сервера, поэтому я не обязательно знаю имена наблюдаемых, которые мне нужны для проверки, поэтому нецелесообразно их проверять отдельно. Пример ниже упрощен, но в реальной реализации я не знаю имен наблюдаемых. Может, я просто пропустил документацию?Нокаут ViewModel isValid error при использовании плагина проверки нокаута
Спасибо за ваше время.
Это делает работу
var dataItem = { FirstName: '', LastName: '', Age: '', Email: '' }
var viewModel = function(data) {
var self = this;
this.Email = ko.observable().extend({ email: true });
this.LastName = ko.observable().extend({ required: true });
this.Age = ko.observable().extend({ required: true, min: 0 });
this.saveClick = function() {
if (!self.Email.isValid() || !self.Age.isValid() || !self.LastName.isValid()) {
alert('Not valid');
else {
alert('Valid');
}
};
this.cancelClick = function() {
ko.mapping.fromJS(dataItem, null, this);
}
ko.mapping.fromJS(data, {}, this);
};
var viewModelInstance = new viewModel(dataItem);
ko.applyBindings(viewModelInstance, document.getElementById('bindingDiv'));
Но это не работает
var dataItem = { FirstName: '', LastName: '', Age: '', Email: '' }
var viewModel = function(data) {
var self = this;
this.Email = ko.observable().extend({ email: true });
this.LastName = ko.observable().extend({ required: true });
this.Age = ko.observable().extend({ required: true, min: 0 });
this.saveClick = function() {
//TODO: according to the documentation you should be able to just
//check self.isValid() but that throws an error that there is no
//such method on the object? dunno why.
if (!self.isValid()) {
alert('Not Valid');
}
else {
alert('Valid');
}
};
this.cancelClick = function() {
ko.mapping.fromJS(dataItem, null, this);
}
ko.mapping.fromJS(data, {}, this);
};
var viewModelInstance = new viewModel(dataItem);
ko.applyBindings(viewModelInstance, document.getElementById('bindingDiv'));