我正在使用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
。这对我的域名有意义。如果用户没有做出选择,它应该是空的。
我该怎么办?
答案 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 -->
希望这可以提供帮助。如果您还有其他问题,请在评论中指定。