[英]Knockout checkbox - Push only checked values into array
I have this checkbox control that dynamically populates 我有这个动态填充的复选框控件
<!-- ko foreach: AllPens -->
<label>
<input type="checkbox" data-bind="checked: IsChecked" />
<span data-bind="text: name"></span>
</label>
<!-- /ko -->
Assuming the observable array GETs (AllPens) 假设可观察数组GET(AllPens)
{ code: "001" , name: "Parker"},
{ code: "002" , name: "Sheaffer"},
{ code: "003" , name: "Mont Blanc"}
I have to POST back an array of the checked elements - 我必须POST一个已检查元素的数组 -
"Pens": [{
"PenType": "001",
"Order": false
}, {
"PenType": "002",
"Order": true
}]
I have a rough idea to store the checked Pen's code and if ischecked in an object - new Pen('001',true) 我有一个粗略的想法来存储已检查的Pen的代码,如果在对象中有缺陷 - 新的Pen('001',true)
function Pen(type, checked) {
var self = this;
self.PenType = ko.observable(type);
self.IsChecked = ko.observable(false);
}
How can I bind checkbox value to Knockout observableArray on an object? 如何将复选框值绑定到对象上的Knockout observableArray?
I believe the below should work if i figure out the above. 如果我弄清楚以上情况,我相信下面应该有用。
self.Pens= ko.computed(function()
{
var selectedPens = [];
ko.utils.arrayForEach(self.Pen(), function (pen) {
if(pen.IsChecked())
selectedPens.push(pen);
});
return selectedPens;
});
I'm still learning KO. 我还在学习KO。 Any help is appreciated :) 任何帮助表示赞赏:)
I managed to get this working. 我设法让这个工作。
Rather than dynamically populating the key value pairs directly to Self.AllPens(), I created a function to load the list of Pens into an Object 我没有动态地将键值对直接填充到Self.AllPens(),而是创建了一个函数来将笔列表加载到对象中
function Pen(type,name,checked) {
var self = this;
self.PenType= ko.observable(type);
self.Name = ko.observable(name);
self.IsChecked = ko.observable(checked || false);
}
And looped through to check for IsChecked below - 并循环检查下面的IsChecked -
self.Pens= ko.computed(function () {
var selectedPens = [];
ko.utils.arrayForEach(self.AllPens(), function (pen) {
if (pen.IsChecked()) {
selectedPens.push({
PenType: pen.penType,
Order: pen.IsChecked()
});
}
});
return selectedPens ;
});
You code should be like this 你的代码应该是这样的
self.checkedPens = function(pen) {
var isChecked = pen.order === "true";
if (pen.penType !== null && isChecked) {
self.Pens.push({
PenType: pen.penType,
Order: isChecked
});
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.