gpt4 book ai didi

javascript - Knockout.js : radio button first click does not show in 3. 0,显示在2.1-2.3

转载 作者:行者123 更新时间:2023-11-30 12:42:58 25 4
gpt4 key购买 nike

fiddle :http://jsfiddle.net/pr5YQ/7/

我遇到了一个似乎是 Knockout.js 相对常见的问题 - 每当首次选择单选按钮时,对象模型中的值都会更新,但单选按钮本身不会显示选择。第二次选择时,该项目显示检查。

有趣的是 Knockout 版本 2 可以正常工作!只有 Knockout 版本 3 有问题。在 fiddle 中,切换到 Knockout 2 的任何版本,表单将根据需要工作。

我已经检查过我设置为值的数据类型是否有任何问题(它们都是数字,应该没问题)并且名称/值设置似乎是正确的。我希望,如果我未能执行上述任一操作,那么第一次点击失败将显示在所有版本的 Knockout 中。

这是我拥有的数据模型的片段:

        "Question_Ref": 1,
"Question_Text": "Question 1",
"Response_Ref": -1,
"Response_Text": "",
"Selected_Answer_Ref": -1,
"Answers": [{
"Answer_Ref": 1,
"Answer_Text": "Yes",
"Answer_Fails": false
}, {
"Answer_Ref": 2,
"Answer_Text": "No",
"Answer_Fails": false
}]

下面是我获取数据对象本身并附加必要的 KO 绑定(bind)的方式:

function AttachKOObjectsOnQuestion(question) {
question.Selected_Answer_Ref_KO = ko.observable(question.Selected_Answer_Ref);
question.Show_Response_KO = ko.computed({
read: function () {
if (!question.Selected_Answer_Ref_KO()) return null;
if (question.Selected_Answer_Ref_KO() < 0) return null;
for (selAnswerCount = 0; selAnswerCount < this.Answers.length; selAnswerCount++) {
var answer = this.Answers[selAnswerCount];
if (answer.Answer_Ref === this.Selected_Answer_Ref_KO()) {
return answer.Answer_Fails;
}
}
return null
},
write: function (value) {},
owner: question
});
var answerCount;
for (answerCount = 0; answerCount < question.Answers.length; answerCount++) {
AttachKOObjectsOnQuestionAnswer(question, question.Answers[answerCount]);
}
}

function AttachKOObjectsOnQuestionAnswer(question, answer) {
answer.ParentQuestion = question;
answer.Selected_Answer_Ref_KO = ko.computed({
read: function () {
return answer.ParentQuestion.Selected_Answer_Ref_KO();
},
write: function (value) {
var selectedAnswer = parseInt(value, 10);
answer.ParentQuestion.Selected_Answer_Ref_KO(selectedAnswer);
},
owner: answer
});
}

下面是单选按钮的相关设置:

<table cellpadding="0" cellspacing="0">
<tbody data-bind="foreach: Answers">
<tr>
<td>
<input type="radio" data-bind="attr: { value: Answer_Ref, name: ParentQuestion.Question_Ref }, checked: Selected_Answer_Ref_KO, click: hideValidators" />
</td>
<td>
<span data-bind="text: Answer_Text"></span>
</td>
</tr>
</tbody>
</table>

这是我第一次使用 Knockout 和 JSON,所以请随意提出批评。谢谢!

最佳答案

您的问题是单选按钮上的checked 绑定(bind)不正确。您正在尝试将 checked 绑定(bind)到您的答案中名为 Selected_Answer_Ref_KO 的属性。但是,您已将该对象添加到问题中,而不是答案中。

要解决此问题,只需将 checked 绑定(bind)更改为 checked: $parent.Selected_Answer_Ref_KO。我已经用这个更改更新了你的 fiddle ,第一次点击时选择工作对我来说是有效的。您可以在 http://jsfiddle.net/pr5YQ/5/ 找到该更新.

关于javascript - Knockout.js : radio button first click does not show in 3. 0,显示在2.1-2.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23726814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com