Javascript 3层嵌套在KnockoutJS中的foreach

Javascript 3层嵌套在KnockoutJS中的foreach,javascript,knockout.js,nested-loops,Javascript,Knockout.js,Nested Loops,我在Knockout中有3个级别的数据需要管理,但只有前两个级别在添加新数据时进行更新。第三级未更新 以下是我目前的代码: 有测验,每个测验都包含问题和答案。 我可以添加测验,我可以添加问题,但答案不会更新 我在网上和stackoverflow上找到的所有示例仅适用于两个级别的数据 如何将第三级作为[+]按钮工作的可观察级别 谢谢 对于希望绑定到的每一层嵌套,您需要将每一层映射到一个可观察的对象 您只映射到一系列可观察的问题。但是,您也应该绘制问题中的每个答案 scope.quizzes=ko

我在Knockout中有3个级别的数据需要管理,但只有前两个级别在添加新数据时进行更新。第三级未更新

以下是我目前的代码:

有测验,每个测验都包含问题和答案。 我可以添加测验,我可以添加问题,但答案不会更新

我在网上和stackoverflow上找到的所有示例仅适用于两个级别的数据

如何将第三级作为[+]按钮工作的可观察级别

谢谢

对于希望绑定到的每一层嵌套,您需要将每一层映射到一个可观察的对象

您只映射到一系列可观察的问题。但是,您也应该绘制问题中的每个答案

scope.quizzes=ko.observearray(
ko.utils.arrayMap(测验、函数(测验){
返回{
name:quick.name,
问题:ko.observearray(quick.questions)//不够远
};
})
);
由于您似乎希望能够编辑测验和问答文本的名称,因此也应该使这些属性可见

scope.quizzes=ko.observearray(
ko.utils.arrayMap(测验、函数(测验){
返回{
名称:ko.observable(quick.name),
问题:ko.Array(
ko.utils.arrayMap(测验、问题、函数(问题){
返回{
文本:ko.可观察(问题文本),
答:柯·阿雷(
ko.utils.arrayMap(问题.答案,函数(答案){
返回{
文本:ko.可观察(答案.文本),
有效:ko.可观察(回答:有效)
};
})
)
};
})
)
};
})
);
这看起来可能很多,但要绑定到这些对象,就必须这样做。通过使用,您可以简化此过程,它将为您完成此映射

scope.quizzes=ko.mapping.fromJS(quizzes);

你的答案数组只是一个数组,而不是一个可观察的数组。您需要将数组定义为ko.observearray。请注意,下面的代码片段bNow对所有3个级别的数组都使用ObservalArray

var initialData = ko.observableArray([
    {
        name:    "Quiz #1",
        questions:    ko.observableArray([
            {
                text: "Question #1.1?",
                answers: ko.observableArray([
                    {
                        text:     "Yes",
                        valid:    true
                    },
                    {
                        text:     "No",
                        valid:    false
                    }
                ])
            },

修正版,感谢Jeff Mercado: