css - 用 knockout 检查我表中的所有复选框

标签 css knockout.js

我有一张表格,第一列有复选框。在标题中,我还有一个复选框。单击此按钮时应选中我表中的所有复选框。

<table class="defaultGrid">
<thead>
    <tr>
        <th><input type="checkbox"></th>
        <th>ID</th>
        <th>Name</th>
    </tr>
</thead>
<tbody data-bind="foreach: model.Things">
    <tr data-bind="css: {selected: IsSelected}">
        <td><input type="checkbox" data-bind="checked: IsSelected" /></td>
        <td data-bind="text: ID"></td>
        <td data-bind="text: Name"></td>
    </tr>
</tbody>
</table>

这是 jsfiddle:http://jsfiddle.net/jJ4H6/29/

如何用 knockout 来完成这个?

谢谢。

最佳答案

您需要一个函数来遍历 Things 集合中的所有元素,并将 IsSelected 设置为 true 或 false。

然后你可以在“main”复选框点击绑定(bind)这个函数:

<input type="checkbox" data-bind="click: selectAll"/>

一个示例实现如下所示:

self.selectAll = function(data, event)
{
    ko.utils.arrayForEach(self.model.Things (), function(item){
       if (event.target.checked)
          item.IsSelected(true);
       else
          item.IsSelected(false);
    });
    return true; //to trigger the browser default bahaviour
}

演示 JSFiddle .

或者你可以在你的 View 模型上有一个 IsAllSelected 属性,并使用 checked 绑定(bind)而不是点击,并在 的更改事件中执行选择逻辑IsAllSelected(或者您也可以使用可写的计算可观察对象)。

我认为如果你想支持这样的场景,最终你将需要这样的东西:全选 -> 手动取消选中每一行应该取消选中标题行等。

Another demo使用 IsAllSelected 计算属性

self.IsAllSelected = ko.computed({
        read: function () {
            var isAllSelected = true;
            ko.utils.arrayForEach(self.model.Things(), function (item) {
                isAllSelected = isAllSelected && item.IsSelected()
            });
            return isAllSelected;
        },
        write: function (value) {
            ko.utils.arrayForEach(self.model.Things(), function (item) {
                if (value) item.IsSelected(true);
                else item.IsSelected(false);
            });
        }
});

关于css - 用 knockout 检查我表中的所有复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15544453/

相关文章:

asp.net-mvc - 当您使用带有 knockout 的 JS View 模型时,MVC 有什么地方吗?

Knockout.Js:执行顺序

css - 构建一个仍然使用 iOS 功能的样式化选择列表

javascript - 在 applyBindings (init/onload) 期间停止 Knockoutjs 验证

javascript - knockout 修改计算内的 ObservableArray

css - 主 div 后面的图像阴影

javascript - ko.utils.extend 不会覆盖模型中的属性

html - 使用 CSS :before and :after pseudo-elements with inline CSS?

javascript - 使用 jQuery 切换 div 的问题

jquery - 3 个 div,自动调整宽度