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

标签 javascript knockout.js

我们有一系列问题。每个问题都有一个答案数组。每个答案都有一个文本。每个问题都有属性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">

fiddle

关于javascript - foreach 循环中对父级的引用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47805403/

相关文章:

javascript - 表单提交后,它不会清除或重置 html 元素。

javascript - 使用 Node 的 SendPulse API 进行身份验证凭据

javascript - AJAX 在 PHP 和 JavaScript 中都可写吗?

javascript - Kinectisj : Issue where mouse trail remains(Layer issue)

jquery - Knockout.js:选中一个复选框时禁用其他复选框

javascript - 当 parent 的观察变化时,Knockoutjs 更新 child

javascript - 使用 ng-bind-html 时 Angular 选项卡会中断

javascript - 使用 knockoutjs 分层 ul 列表崩溃

json - 如何在嵌套模型中自定义 knockout 映射创建?

javascript - 为什么我的 Knockout Radio 按钮在另一个具有点击绑定(bind)的元素中时会失败?