我有一个场景,我必须向用户显示问题列表。我在淘汰赛中遇到了可观察阵列和foreach绑定。我可以轻松地与他们一起显示问题列表。
但是,我的要求是问题是相互依存的。比如说。如果第一个问题的响应为“a”,则必须显示问题2,如果问题2的响应为“b”,则应显示问题4,5。我怎么能用淘汰赛来做这个?
我正在考虑为每个问题使用计算字段并根据它们定义可见条件。但我无法想到一个完整的解决方案。任何建议都会非常有帮助。提前致谢
答案 0 :(得分:1)
你的直觉是正确的;最简单的方法是在可见性绑定中使用计算的observable。举个简单的例子,这应该有效:
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]);
};
在这种情况下,元素是硬编码的。这样做是不可维护的。可能你可以设计一些避免重复的方法,并以更紧凑的方式存储每个问题的规范。但是,如何做到这一点超出了简短的Stack Overflow答案的范围!不过,我建议你有问题陈述他们的依赖关系,而不是让早期问题管理其他问题的状态,可以这么说。
我希望这有点线索。