【问题标题】:Check multiple checkboxes in knockout.js binded by JSON选中 JSON 绑定的 knockout.js 中的多个复选框
【发布时间】:2014-05-06 09:55:49
【问题描述】:

我是 JSON 和淘汰赛的新手。我面临一个问题,即我有一个 JSON 格式的数据集,例如定义了 10 个布尔值,例如

IsHappy = true;
IsSad = false;
IsAngry = true;

等等。我的 ViewModel 是从 JSON 字符串创建的,我将值绑定到复选框:-

<input type="checkbox" data-bind="checked: IsHappy"/>
<input type="checkbox" data-bind="checked: IsSad"/>
<input type="checkbox" data-bind="checked: IsAngry"/>

我将 ViewModel 转换回 JSON 并将其 ajax 保存到服务器。

这一切都很好,但是我不知道如何实现“全选”功能。我已经阅读了在线示例 (http://jsfiddle.net/rniemeyer/eT7xV/),其中涉及创建 observableArray 和切换 IsSelected() 可观察对象,但在我的情况下,如何将不同的 JSON 属性映射到 IsSelected() 属性,以及如何切换IsSelected() observable 更新原始 JSON 属性。

我尝试使用 jquery 设置 attr('checked'),但这样做会选中该框,但不会更新 ViewModel,这意味着当我将其转换回 JSON 并将其发布到服务器端时,没有检测到任何更改。

【问题讨论】:

    标签: javascript jquery json knockout.js


    【解决方案1】:

    您需要有一个属性名称数组(您可以明确列出它们,也可以使用 Object.keys 收集它们)。

    然后,当检查您的 allSelected 支票簿时,您将遍历这些属性名称数组并根据 newValue 设置它们:

    viewModel.allSelected.subscribe(function(newValue) {
        var _this = this;
    
        //var checkboexes = ['IsHappy', 'IsSad', 'IsAngry'];
        var checkboexes = Object.keys(_this).filter(function(k) { 
           return k.indexOf('Is') == 0; 
        });
    
        ko.utils.arrayForEach(checkboexes, function(banner) {        
           _this[banner](newValue); 
        });
    }, viewModel);
    

    演示JSFiddle.

    【讨论】:

    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 2015-04-11
    相关资源
    最近更新 更多