checkbox knockout点击绑定无法正常工作

时间:2018-03-01 09:23:13

标签: javascript knockout.js

我知道,淘汰赛希望我们在绑定到true事件的函数中返回click,以便选中/取消选中复选框。

我尝试了以下code,但没有选中复选框。我可以使用匿名计算函数显示值,但我的数组可能很大,我不想保持性能开销。

还有其他办法吗?或者我做错了吗?

修改:添加代码

HTML

<div data-bind="foreach: array">
    <div data-bind="foreach: $data.child">  
        <input type="checkbox" data-bind="checked: isChecked, click: function(data, event){$parentContext.$parent.clickBox(data, event, $parent)}">
        <span data-bind="text: $data.value"></span>    
    </div>
   <p data-bind="text: label"></p>
</div>

JS

var mainModel = function(){
  var self = this;  
  self.isChecked = ko.observable(true);  
  self.clickBox = function(data, event, $parent){
    var j=0;
    for(var i=0; i<$parent.length; i++){
        if($parent[i].isChecked()){
        j++;
      }
    }
    $parent.label(j);
    return true;
  }

  self.array = ko.observable(
  [
    {child: [
        {value: 'a', isChecked: ko.observable(false)},
      {value: 'b', isChecked: ko.observable(false)}],
     label: ko.observable(0)
    },
    {child: [
        {value: 'c', isChecked: ko.observable(false)},
      {value: 'd', isChecked: ko.observable(false)}],
     label: ko.observable(0)
    }
  ]);
}

ko.applyBindings(new mainModel());

1 个答案:

答案 0 :(得分:1)

您缺少var data = {"a":"\u00A9"}; console.log(data.a);,请更改以下代码

return

<input type="checkbox" data-bind="checked: isChecked, 
click:   function(data, event){
$parentContext.$parent.clickBox(data, event, $parent)}">

如果您没有传递返回处理程序,默认情况下,knockout将通过调用

来阻止该操作
<input type="checkbox" data-bind="checked: isChecked, 
click:   function(data, event){
return $parentContext.$parent.clickBox(data, event, $parent)}">