我有一个敲除计算器,其工作方式类似于检查/取消选中'yes'和'no'单选按钮的所有字符串。Knockout:扩展计算以处理不同的观察对象
我想尝试并扩展它,以便它可以针对不同的可观察属性。此刻,如果'optionList'中的所有'paramOne'属性都选择为'yes',那么我返回'是',类似于'否'。但我想使用它也用于'paramTwo'参数和'paramThree'参数等。
任何想法如何做到这一点?也许计算器在这里不是最合适的?
小提琴这里:https://jsfiddle.net/3kpx5qaf/
var AppViewModel = function() {
var self = this;
self.optionList = ko.observableArray();
self.optionList().push({
id : 'option1',
title: "option one",
paramOne:ko.observable(),
paramTwo: ko.observable(),
paramThree: ko.observable(),
paramFour: ko.observable()
});
self.optionList().push({
id : 'option2',
title: "option two",
paramOne:ko.observable(),
paramTwo: ko.observable(),
paramThree: ko.observable(),
paramFour: ko.observable()
});
self.selectAll = ko.computed({
read: function() {
var numNo = 0;
var numYes = 0;
var items = self.optionList();
ko.utils.arrayFirst(items, function(item) {
if(item.paramOne() == "No"){
numNo += 1;
}else if(item.paramOne() == "Yes"){
numYes += 1;
}
});
if(numNo == items.length){
return "No";
}else if(numYes == items.length){
return "Yes";
}else{
return null;
}
},
write: function(value) {
var items = self.optionList();
ko.utils.arrayForEach(items, function(item) {
item.paramOne(value);
});
}
});
}
ko.applyBindings(new AppViewModel());
“yes”和“no”代替“true”和“false”是什么意思?使用两个字符串来表示布尔值是麻烦的,容易出错的,具有国际化问题,并且所有这些都没有提供功能性好处。那为什么呢? – Tomalak
同意,布尔值在这里会更适合,但基于knockout文档的示例基于单选按钮值(http://knockoutjs.com/documentation/checked-binding.html),所以这是我做的第一件事。 – user2424495
我同意Jeroen关于XY问题。不要描述你想要实现的解决方案,而要描述你想解决的问题。 – Tomalak