Javascript 计算的Knockoutjs未从ObservalArray更新

Javascript 计算的Knockoutjs未从ObservalArray更新,javascript,knockout.js,Javascript,Knockout.js,我希望在更新可观测数组时更新计算数组。数组中填充了问题和答案(是或否)。当用户更改问题的答案时,我希望某个区域可见或不可见 因此,如果回答了一个问题,那么计算出的is5B应该是真的“oui”,这应该使部分可见 is5B computed仅在初始化时计算,在更新数组时不触发(它已更新,我用断点检查) 以下是视图模型: var section5Model = ko.validatedObservable({ Questions5A: ko.observableArray(GetQuestio

我希望在更新可观测数组时更新计算数组。数组中填充了问题和答案(是或否)。当用户更改问题的答案时,我希望某个区域可见或不可见

因此,如果回答了一个问题,那么计算出的
is5B
应该是真的
“oui”
,这应该使部分可见

is5B computed仅在初始化时计算,在更新数组时不触发(它已更新,我用断点检查)

以下是视图模型:

var section5Model = ko.validatedObservable({
    Questions5A: ko.observableArray(GetQuestions('5A')),
    Questions5B: ko.observableArray(),
    Questions5C: ko.observableArray(),
    ContactAQ: ko.observable(),
    Date: ko.observable(''),
    Heure: ko.observable(''),
    CategorisePar: ko.observable(''),
    DateCategorise: ko.observable(''),
    RepOuiNon: [{ label: 'Oui', value: 0 }, { label: 'Non', value: 1 }]
});

section5Model().is5B = ko.computed(function () {
    this.Questions5A().forEach(function (item) {
        if (item.reponse == 'Oui') {
            return true;
        }
    });
}, section5Model());
以下是标记:


这是一个很好的条件

这是我的不满


您遇到的问题是,
项响应不可见。所以如果它改变了,KnockoutJS不知道。要解决这个问题,你必须将其更改为可观察

section5Model().is5B = ko.computed(function () {
    this.Questions5A().forEach(function (item) {
        if (item.reponse() == 'Oui') {
            return true;
        }
    });
}, section5Model());

Computed是依赖于一个或多个其他可观测值的函数,当这些依赖项中的任何一个发生变化时,它们将自动更新。所以在你的例子中,在你的计算函数中没有可观测的。所以,至少要在侧面计算一个变量作为可观察变量。在您的情况下,请将
项作为可观察的响应。为此,您需要在
GetQuestions('5A')

请按要求回答问题

 var section5Model = ko.validatedObservable({
        Questions5A: ko.observableArray([
                {reponse : ko.observable('reponse 1 ') },
                {reponse : ko.observable('reponse 2') },
                /* other objects */
        ]),      
        /* other code  */

顺便说一下,视图中有很多重复项。考虑使用。谢谢,这是答案的一部分,而“祝福者”的答案完成了解决方案!谢谢,这和Slawomir的答案完成了解决方案!