【问题标题】:Knockout checked binding with no default没有默认值的 Knockout 检查绑定
【发布时间】:2014-09-18 23:29:46
【问题描述】:

我正在使用 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 会将您的模型属性设置为等于所选单选按钮的值。在前面的示例中,单击 value="cherry" 的单选按钮会将 viewModel.spamFlavor 设置为 "cherry"。

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

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

我该怎么办?

【问题讨论】:

    标签: html knockout.js


    【解决方案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 -->
    

    希望这会有所帮助。如果您还有任何问题,请在 cmets 中指定。

    【讨论】:

    • 我看到它应该可以工作,但我不明白为什么我的不工作。它没有将 $parent.response 设置为答案,而是设置为“on”。奇怪。不过,感谢您的帮助。
    • 你能改变小提琴来演示你的案例的细节吗?我的意思是让它不适用于你的情况。您在问题中提供的内容与我在小提琴中提供的内容非常相似。我想我们会这样找到问题的。
    • 我把小提琴弄乱了,让它看起来更像我的(使用 ko.mapping 是最大的不同)。它还在那边工作。我注意到小提琴使用的是 ko 3.0。我的项目是2.3。我升级了,看起来它正在工作! :)
    • 太棒了!它似乎超出了所描述的情况。很高兴它已被清除))如果您将答案标记为已应用,我将不胜感激;)
    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 2013-11-24
    • 2010-11-08
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    相关资源
    最近更新 更多