我有这个动态填充的复选框控件
<!-- ko foreach: AllPens -->
<label>
<input type="checkbox" data-bind="checked: IsChecked" />
<span data-bind="text: name"></span>
</label>
<!-- /ko -->
假设可观察数组 GETs (AllPens)
{ code: "001" , name: "Parker"},
{ code: "002" , name: "Sheaffer"},
{ code: "003" , name: "Mont Blanc"}
我必须 POST 回一个已检查元素的数组 -
"Pens": [{
"PenType": "001",
"Order": false
}, {
"PenType": "002",
"Order": true
}]
我有一个粗略的想法来存储选中的 Pen 的代码,如果在对象中选中 - new Pen('001',true)
function Pen(type, checked) {
var self = this;
self.PenType = ko.observable(type);
self.IsChecked = ko.observable(false);
}
如何将复选框值绑定(bind)到对象上的 Knockout observableArray?
我相信如果我弄清楚了上面的内容,下面的内容应该会起作用。
self.Pens= ko.computed(function()
{
var selectedPens = [];
ko.utils.arrayForEach(self.Pen(), function (pen) {
if(pen.IsChecked())
selectedPens.push(pen);
});
return selectedPens;
});
我还在学习KO。任何帮助表示赞赏:)
最佳答案
我设法让它工作。
我没有将键值对直接动态填充到 Self.AllPens(),而是创建了一个函数来将 Pens 列表加载到对象中
function Pen(type,name,checked) {
var self = this;
self.PenType= ko.observable(type);
self.Name = ko.observable(name);
self.IsChecked = ko.observable(checked || false);
}
并循环检查下面的 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 ;
});
关于javascript - knockout 复选框 - 仅将选中的值推送到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50041385/