敲除:如何编程可观察数组元素之间的相互依赖关系



我有必须向用户显示问题列表的情况。我在敲除中遇到了可观察的数组和foreach绑定。我可以轻松地向他们显示问题列表。

但是,我的要求是这些问题是相互依存的。 例如,如果第一个问题的回答为"A",则必须显示问题 2,如果问题 2 的回答为"B",则应显示问题 4,5。如何使用淘汰 js 来做到这一点?

我正在考虑为每个问题使用计算字段并基于它们定义一个可见条件。但是我想不出一个完整的解决方案。任何建议都将非常有帮助。提前致谢

你的直觉是正确的;最简单的方法是有一个在可见性绑定中使用的计算可观察量。举个简单的例子,这应该有效:

var ANSWER = { // psuedo-enum
    A : 'a',
    B : 'b',
    C : 'c',
    NONE : null
};
var questionOne = {
    text : 'foo',
    answer : ko.observable(ANSWER.NONE),
    shouldDisplay : true        
};
var questionTwo = {
    text : 'bar',
    answer : ko.observable(ANSWER.NONE),
    shouldDisplay : ko.computed(function(){
        return questionOne.answer() === ANSWER.B;
    })
};
var questionThree = {
    text : 'baz',
    answer : ko.observable(ANSWER.NONE),
    shouldDisplay : ko.computed(function(){
        return questionOne.answer() === ANSWER.B && questionTwo.answer() === ANSWER.C;
    })
};
var someViewModel = {
    questions : ko.observableArray([questionOne, questionTwo, questionThree]);
};

在这种情况下,元素是硬编码的。这样做不是很易于维护。也许您可以设计一些方法来避免重复并以更紧凑的方式存储每个问题的规范。但是,您如何做到这一点超出了简短的堆栈溢出答案的范围!不过,我建议您让问题陈述其依赖关系,而不是让早期问题"远程"管理其他问题的状态,可以这么说。

我希望这是一个线索。

最新更新