对foreach循环中父级的引用不起作用

时间:2017-12-14 03:23:36

标签: javascript knockout.js

我们有一个questions数组。每个问题都有一个answer数组。每个答案都有textvalue。每个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/

1 个答案:

答案 0 :(得分:1)

在该上下文中,$parent指的是问题对象,而不是模型本身。您必须引用祖父母(父母的父母)才能访问model成员。

您可以通过$parents上下文属性访问它们。它只是相对于当前上下文的父对象的数组。 $parents[0]对应于父对象(与$parent相同)。祖父母是$parents[1]

<input name="something"
       type="radio"
       data-bind="checked: $parents[1].selectedAnswer, value: value">

fiddle