Javascript 选中由JSON绑定的knockout.js中的多个复选框
我不熟悉JSON和knockout。我面临的一个问题是,我有一个JSON数据集,例如定义了10个布尔值Javascript 选中由JSON绑定的knockout.js中的多个复选框,javascript,jquery,json,knockout.js,Javascript,Jquery,Json,Knockout.js,我不熟悉JSON和knockout。我面临的一个问题是,我有一个JSON数据集,例如定义了10个布尔值 IsHappy = true; IsSad = false; IsAngry = true; 等等。我的ViewModel是从JSON字符串创建的,我将值绑定到复选框,如下所示:- <input type="checkbox" data-bind="checked: IsHappy"/> <input type="checkbox" data-bind="checked:
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将其保存到服务器
这一切都很好,但我不知道如何实现“全选”功能。我已经在网上阅读了示例(),其中包括创建ObservalArray和切换IsSelected()observable,但在我的例子中,如何将不同的JSON属性映射到IsSelected()属性,以及切换IsSelected()observable如何更新原始JSON属性
我尝试使用jquery设置attr('checked'),但这样做会选中复选框,但不会更新ViewModel,这意味着当我将其转换回JSON并发布到服务器端时,未检测到任何更改。您需要一个属性名数组(您可以显式列出它们,也可以使用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);
演示。我对您使用解决方案生成JSFIDLE的速度感到震惊和惊讶。。。!!!作为跟进,是否有任何方法将值重置回原始值(真、假、真)?没有简单的方法恢复以前的值。您必须将这些值临时存储在某个位置,或者从服务器重新检索它们。有一些插件/模式可以做到这一点: