淘汰赛选择/取消
我使用淘汰赛映射JSON obejct用户控制所有的组合框,我有一个复选框列表, 它们看起来像淘汰赛选择/取消
<input type="checkbox" data-bind="checked: IsEnabled1" />
我有JSONObject的
var viewModel = {
IsEnabled1 :ko.observable(true),
IsEnabled2 :ko.observable(true),
IsEnabled3 :ko.observable(false)
};
...
ko.applyBindings(viewModel);
我想添加将检查/取消选中所有其他的全局复选框,我在JavaScript端进行了此更改,但全局复选框更新UI部分,但它们来自单独复选框的数据不映射到JSON对象。
全球复选框
$("#GeneralTable thead tr th:first input:checkbox").click(function() {
var checkedStatus = this.checked;
$("#GeneralTable tbody tr td:first-child input:checkbox").each(function() {
this.checked = checkedStatus;
});
});
这个代码我的JSON对象后,包含不相关的UI数据。
如何更新JS端更改后的所有JSON复选框?
请检查例子:http://jsfiddle.net/MenukaIshan/5gaLjh2c/
我认为这正是你所需要的。所有物品都有IsChecked
可观察财产。 ViewModel包含计算的observable(可读和可写)来检查或取消选中所有项目。
这是使用的完美例子。让我的一天两次! – 2014-09-22 13:13:08
使用类似的代码。我尝试了你的小提琴,但在我的情况下,我正在使用knockout-3.2.0.js,它不工作(即使在小提琴中),但使用knockout-2.0.0.js。任何线索。 – 2016-04-07 10:23:37
3.2.4对此没有任何作用 – 2017-06-19 16:48:13
这里有http://jsfiddle.net/rniemeyer/kXYuU/
上述解决方案可以通过两种方式
得到改善 - 要做出AllChecked假空列表,我们需要检查长度
- 要减少的替代解决方案选择所有的长列表时数重新计算,我们需要增加油门
self.AllChecked = ko.computed({
read: function() {
var firstUnchecked = ko.utils.arrayFirst(self.Items, function(item) {
return item.IsChecked() == false;
});
return self.Items.length && !firstUnchecked;
},
write: function(value) {
ko.utils.arrayForEach(self.Items, function(item) {
item.IsChecked(value);
});
}
}).extend({ throttle: 1 });
您发布的代码是不够的,我们来回答你的问题。 – 2012-01-31 15:00:49
现在应该会更好。谢谢。 – 2012-01-31 15:18:14
代码中的问题,即与节点交互的问题。但是你需要与数据交互。这在MVVM世界更好:-)请检查我的答案。我认为它会为你工作。 – Romanych 2012-01-31 15:32:14