Knockout检查绑定没有默认值

时间:2014-07-27 18:13:00

标签: html knockout.js

我正在使用Knockout处理Web应用程序中的交互性。我正在尝试创建一个多项选择测验小部件。我想提出一个问题,然后是一组用户可以选择的单选按钮。我不想要默认答案。

我的代码中有以下内容:

 <!-- ko foreach: {data: answers, as: 'answer'} -->
  <li class="list-group-item">
    <input type="radio" 
           name="answers" 
           data-bind="checkedValue: answer, checked: $parent.current.problem.response">
    <span data-bind="mathjax: answer.value.text">1.5</span>
  </li>
 <!-- /ko -->

现在,Knockout文档说:

  

当用户更改选择了哪个单选按钮时,KO会将您的模型属性设置为等于所选单选按钮的值。在前面的示例中,单击带有值=&#34; cherry&#34;的单选按钮。将viewModel.spamFlavor设置为&#34; cherry&#34;。

因此,根据文档,我的理解是current.problem.response observable应该设置为answer对象。但相反,它被设置为on

认为这是因为我的current.problem.response observable最初是null。这对我的域名有意义。如果用户没有做出选择,它应该是空的。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

看起来您的方案有效。也许问题不在现场。 这个小提琴表明它有效http://jsfiddle.net/tabalinas/y3LpD/ 打开控制台以查看所选选项。

演示视图模型看起来像

var vm = {
    answers: [
        { text: 'ans1' },
        { text: 'ans2' },
        { text: 'ans3' },
        { text: 'ans4' }
    ],
    response: ko.observable(null)
};

vm.answer = vm.answers[0];

vm.response.subscribe(function(value) {
    console.log(value);
});

根据模型稍加纠正标记

<!-- ko foreach: {data: answers, as: 'answer'} -->
  <li class="list-group-item">
    <input type="radio" 
           name="answers" 
      data-bind="checkedValue: answer, checked: $parent.response" />
    <span data-bind="text: answer.text"></span>
  </li>
 <!-- /ko -->

希望这可以提供帮助。如果您还有其他问题,请在评论中指定。