这是一个非常简单的故事,我无法使其发挥作用:
我们有一个questions
数组。每个问题都有一个answer
数组。每个答案都有text
和value
。每个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
)选择适当的单选按钮。但它不起作用。
我错过了什么?
答案 0 :(得分:3)
这是一个奇怪的问题。我能够通过改变value
和<input name="something" type="radio" data-bind="value: value, checked: $parent.selectedAnswer" />
绑定的顺序来修复它:
foreach
还有另一个解决方法。如果你切换到淘汰赛的最新版本,这个问题就会消失。所以,我假设他们在版本2和3.0之间修复了它。
(另外,您可以简化data-bind="foreach : questions"
对此的绑定:onEnterPress = (e) => {
if(e.keyCode == 13 && e.shiftKey == false) {
e.preventDefault();
this.myFormRef.submit();
}
}
render() {
return (
<form ref={el => this.myFormRef = el} className="">
<textarea type="text" rows="3" name="body" onKeyDown={this.onEnterPress} />
<button className="btn" type="submit">
Comment
</button>
</form>
);
}
)
<强>更新强>:
这确实是一个错误。您可以浏览@ user3297291&#39; detailed answer以获取有关此内容的更多信息。