我们有一系列问题
。每个问题都有一个答案
数组。每个答案都有一个文本
和值
。每个问题
都有属性selectedAnswer
,它保留所选答案的值
。
实现:
<div data-bind="foreach : {data: questions}">
<p data-bind="text: desc"></p>
<div data-bind="foreach: {data: answers}">
<div>
<span>Working:</span>
<label data-bind="text: answer"></label>
<input name="something" type="radio" data-bind="checked: model.selectedAnswer, value: value"></input>
<span>...Not working--></span>
<label data-bind="text: answer"></label>
<input name="something" type="radio" data-bind="checked: $parent.selectedAnswer, value: value"></input>
</div>
</div>
</div>
The selected answer is:
<span data-bind="text: model.selectedAnswer">
</span>
这是相关的 JavaScript
:
model = {
selectedAnswer: ko.observable(),
questions: ko.observableArray()
};
var q1 = {
desc: 'Do you like JS?',
answers: [
{answer:'Yes', value:'Yaaay'},
{answer:'No', value:'Nope'}
]
};
model.questions.push(q1);
ko.applyBindings(model);
问题:
如果我通过 model.selectedAnswer
引用 selectedAnswer
,它就可以正常工作。如果我通过 $parent.selectedAnswer
引用它,它就不起作用。我错过了什么?
JSFiddle:
https://jsfiddle.net/votsevfd/2/
最佳答案
在这种情况下,$parent
指的是问题对象,而不是模型本身。您必须引用祖 parent ( parent 的 parent )才能访问 model
成员。
您可以通过 $parents
上下文属性访问它们。它只是相对于当前上下文的父对象的数组。 $parents[0]
对应于父对象(与$parent
相同)。祖 parent 是$parents[1]
。
<input name="something"
type="radio"
data-bind="checked: $parents[1].selectedAnswer, value: value">
关于javascript - foreach 循环中对父级的引用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47805403/