已检查数据绑定不适用于淘汰赛js中的单选按钮

时间:2016-09-29 08:52:30

标签: javascript html5 knockout.js knockout-2.0

<div id="distance-filter" data-bind="foreach: model.distance">
<p ><input type="radio" value="value" name="distance" data-bind="checked: model.check"> <span data-bind="text:model.check"></span></p>
</div>

已检查的数据绑定无效 我的模型如下

var model= {    
    filter_list: ko.observableArray([{filter:'restaurant'},{filter:'hospital'},{filter:'atm'},{filter:'cafe'}]),
    fav_list: ko.observableArray([{fav:'Pizzahut'},{fav:'Dominos'},{fav:'Barista'}]),
     distance: ko.observableArray([{value: 500},{value: 1000},{value: 5000},{value: 10000}]),
     check: ko.observable(1000)

};

2 个答案:

答案 0 :(得分:1)

问题是您没有设置每个项目的正确值。相反,它们都具有值"value"

取出

value="value"

并将您的数据绑定更改为

data-bind="checked: model.check, checkedValue: value"

答案 1 :(得分:0)

这可能不是你最终想做的事情,但它至少让检查做了一些有趣的事情。

虽然你可以引用model,因为它是一个全局变量,你不应该。 (它不应该是全局变量。)而不是model.distance,只需在distance绑定中使用foreach。在foreach中,上下文发生了变化。要引用checked(未在每个distance对象中定义),您需要使用$parent.checked。您可以直接使用value,因为上下文是当前的distance对象。

您可能想要做的是让每个按钮都标有自己的value,然后在foreach之外打印checked的值以指示其当前值。如上所述,checked的值打印在每个按钮旁边,当您更改选择了哪个按钮时,它们都会改变。

另外:checked的值应该是一个字符串,因为input项的值是字符串。

&#13;
&#13;
var model = {
  distance: ko.observableArray([{
    value: 500
  }, {
    value: 1000
  }, {
    value: 5000
  }, {
    value: 10000
  }]),
  check: ko.observable('1000')
};

ko.applyBindings(model);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div id="distance-filter" data-bind="foreach: distance">
  <p>
    <input type="radio" name="distance" data-bind="attr: { value: value }, checked: $parent.check">
    <span data-bind="text:$parent.check"></span>
  </p>
</div>
&#13;
&#13;
&#13;