バインドできるようにしたいネストのレベルごとに、各レベルをオブザーバブルにマップする必要があります。
観察可能な一連の質問にのみマッピングしました。ただし、質問の各回答もマッピングする必要があります。
scope.quizzes = ko.observableArray(
ko.utils.arrayMap(quizzes, function(quiz) {
return {
name: quiz.name,
questions: ko.observableArray(quiz.questions) // not far enough
};
})
);
クイズの名前と質問と回答のテキストを編集できるようにしたいように思われるので、これらのプロパティも監視できるようにする必要があります。
scope.quizzes = ko.observableArray(
ko.utils.arrayMap(quizzes, function(quiz) {
return {
name: ko.observable(quiz.name),
questions: ko.observableArray(
ko.utils.arrayMap(quiz.questions, function (question) {
return {
text: ko.observable(question.text),
answers: ko.observableArray(
ko.utils.arrayMap(question.answers, function (answer) {
return {
text: ko.observable(answer.text),
valid: ko.observable(answer.valid)
};
})
)
};
})
)
};
})
);
これは多くのように思えるかもしれませんが、これらのオブジェクトにバインドできるようにするためにあなたがしなければならないことです。マッピングプラグインを使用すると、このプロセスを簡単にすることができ、このマッピングが自動的に行われます。
scope.quizzes = ko.mapping.fromJS(quizzes);