【问题标题】:Knockout.js: Initial value of observable doesn't update RadioButton stateKnockout.js:observable 的初始值不会更新 RadioButton 状态
【发布时间】:2017-12-14 08:39:23
【问题描述】:

这是一个非常简单的故事,我没能成功:

我们有一个questions 数组。每个问题都有一个answer 数组。每个答案都有一个textvalue。每个question 都有属性selectedAnswer 代表所选答案的value

这里是 jsfiddle:https://jsfiddle.net/votsevfd/8/

实施:

<div data-bind="foreach : {data: questions}">

Question: <span data-bind="text: descr"></span>
<div data-bind="foreach: {data: answers}">
  <div>    
    <label data-bind="text: text"></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: selectedAnswer"></span>
</div>
</div>

这里是相关的JavaScript

 var model = {
  questions: ko.observableArray(),
  };

var q1 = {
  descr: 'Do you like JS?',
  selectedAnswer: ko.observable('200'), // Initially, select No (200)
  answers: [
    {text:'Yes', value:'100'},
    {text:'No', value:'200'}
  ],
}
model.questions.push(q1);

ko.applyBindings(model);

问题: 我希望根据selectedAnswer 的初始值选择适当的单选按钮(在上述情况下,单选按钮No)。但它不起作用。

我错过了什么?

【问题讨论】:

  • 这是因为您使用的是旧的淘汰版。在here 之前,我已经回答了一个遇到相同问题的问题
  • @user3297291 谢谢,但不幸的是升级 Knockout 对我来说不是一个选项!

标签: javascript knockout.js


【解决方案1】:

这是一个奇怪的问题。我可以通过更改 checkedvalue 绑定的顺序来修复它,如下所示:

<input name="something" type="radio" data-bind="value: value, checked: $parent.selectedAnswer" />

Updated fiddle


还有另一个解决方法。如果您切换到淘汰赛的最新版本,这个问题就会消失。所以,我假设他们在版本 2 和 3.0 之间修复了它。

Updated fiddle

(另外,你可以简化你的foreach绑定到这个:data-bind="foreach : questions"

更新

这确实是一个错误。您可以通过@user3297291 的detailed answer 了解有关此的更多信息。

【讨论】:

  • (在错误链接后重新发布;感谢@JoseLuis) 我将在此处重复我对问题的评论以提高知名度:对于那些对 2.x 版本之间发生了哪些变化感到好奇的人和 3.x,看看我写的这个答案:stackoverflow.com/questions/38606419/…
  • @adiga 我怎么能感谢你。现在像魅力一样工作。也谢谢你的参考。
猜你喜欢
  • 2021-10-29
  • 2018-03-09
  • 2020-09-19
  • 2020-03-09
  • 2020-10-30
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
相关资源
最近更新 更多