У меня есть форму с множеством вопросов. В каждом вопросе есть несколько ответов. На уровне формы я хотел бы создать несколько вычисленных наблюдаемых данных, таких как общий балл и количество вопросов. Форммодель, вопросымодели и андермодель создаются таким же образом. Вопросительная модель «знает» ответы. Это позволяет мне создавать рассчитанные наблюдаемые числа, такие как количество ответов или максимальных точек.Вычислительные наблюдаемые в вложенных массивах с картографическим плагином
Моя проблема - это модель формы, которая не распознает массив вопросов. Я могу подсчитать количество ответов в каждом вопросе, но не количество вопросов в форме. Что-то не так с моими моделями или я должен исследовать свои данные?
function formViewModel(data) {
var self = this;
var mapping = {
'questions': {
create: function (options) {
return new questionsViewModel(options.data);
}
}
};
var model = ko.mapping.fromJSON(data, mapping, self);
model.numberOfQuestions = ko.computed(function() {
return self.questions().length; // error: self.questions() is not a function
});
return model;
}
function questionsViewModel(data) {
var self = this;
var mapping = {
'answers': {
create: function (options) {
return new answersViewModel(options.data);
}
}
};
var model = ko.mapping.fromJS(data, mapping, self);
model.numberOfAnswers = ko.computed(function() {
return self.answers().length; // no problem
});
return model;
}
function answersViewModel(data) {
var self = this;
var mapping = {};
var model = ko.mapping.fromJS(data, mapping, self);
return model;
}
Благодарим за ваши предложения. Однако это не решило мою проблему: Проверка на self.questions() все еще дала ту же ошибку: «questions() не является функцией». Изменение функции "formViewModel (данные) {" в "var formViewModel = функция (данные) {" ничего не сделала. Я получаю все свои данные в одном вызове Ajax. Поэтому formViewModel использует ko.mapping.fromJSON. В вопросеModel используется ko.mappingfromJS. Кажется, что эти функции не эквивалентны ... – Jeroen
Console.log the self and see the scope is the point point –
Вы были правы! Это проблема масштаба. Я должен был: return self.formulier.questions(). Length; («formulier» - это имя первого или корневого элемента моей строки JSON) Wonderfull. Большое спасибо! – Jeroen