对于您希望能够绑定到的每个嵌套级别,您需要将每个级别映射到一个可观察对象。
您仅映射了问题的可观察数组,但是您还应该将每个问题中的答案也映射出来。
scope.quizzes = ko.observableArray(
ko.utils.arrayMap(quizzes, function(quiz) {
return {
name: quiz.name,
questions: ko.observableArray(quiz.questions)
};
})
);
由于您想要编辑测验名称以及问题和答案文本,因此您还应将这些属性定义为可观察的。
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);