淘汰赛:订阅ObservableArray

时间:2017-01-17 18:21:36

标签: javascript knockout.js

我不确定我在以下示例中遗漏了什么:
 http://jsfiddle.net/2NMJX/438/

但是,每次选中复选框并将其添加到observableArray" select"时,不应该触发订阅下的函数。 ?

感谢您的帮助

<table>
  <tbody data-bind="foreach:seats" >
    <tr>
      <td>
        <span data-bind="text:No"></span>
      </td>
      <td>
        <input type="checkbox" data-bind="checked:$parent.selected(), checkedValue:No" />
      </td>
    </tr>
  </tbody>
</table>

var viewModel = {
    seats:ko.observableArray( [
    { "No": "1" }, { "No": "2" },
    { "No": "3" }, { "No": "4"},
   { "No": "5" }, { "No": "6"},
    { "No": "7" }, { "No": "8"},
  { "No": "9" },
    ]),
    selected: ko.observableArray()
};

viewModel.selected.subscribe(
            function(newvalue){
            alert(newvalue);
        }
    );

 ko.applyBindings( viewModel);

1 个答案:

答案 0 :(得分:1)

我相信这只是一个错字。只需按() checked:$parent.selected,如下所示:

<input type="checkbox" data-bind="checked:$parent.selected, checkedValue:No" />

可能会读这个来解释一些行为:

KnockOut Checked Binding

  

如果您的参数解析为数组,则会给予特别考虑。在这种情况下,如果值与数组中的项匹配,KO将设置要检查的元素,如果数组中没有包含,则取消选中。

     

当用户选中或取消选中该复选框时,KO将相应地添加或删除数组中的值。