我们有一个questions
数组。每个问题都有一个answer
数组。每个答案都有text
和value
。每个question
都有selectedAnswer
属性,用于保留所选答案的value
。
实施
<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);
问题:
如果我通过selectedAnswer
引用model.selectedAnswer
,则可以正常使用。如果我通过$parent.selectedAnswer
引用它,它就不起作用了。我错过了什么?
的jsfiddle:
https://jsfiddle.net/votsevfd/2/
答案 0 :(得分:1)
在该上下文中,$parent
指的是问题对象,而不是模型本身。您必须引用祖父母(父母的父母)才能访问model
成员。
您可以通过$parents
上下文属性访问它们。它只是相对于当前上下文的父对象的数组。 $parents[0]
对应于父对象(与$parent
相同)。祖父母是$parents[1]
。
<input name="something"
type="radio"
data-bind="checked: $parents[1].selectedAnswer, value: value">