javascript - knockout 复选框 - 仅将选中的值推送到数组中

标签 javascript jquery knockout.js

我有这个动态填充的复选框控件

<!-- 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/

相关文章:

Knockout.js:绑定(bind)到复杂对象

javascript - 在 ASP.NET MVC 中将 anchor 标记 id 传递给 javascript

javascript - JavaScript 的最长执行时间

javascript - 谷歌地图 getZoom

javascript - 如何使用 XS+3 转换为二进制?

javascript - 如何通过 jquery 反转对兄弟元素的操作

javascript - 如何在vuejs中使用onkeypress

asp.net - 如何从Web方法中的动态参数列表中获取各个参数,使用jquery ajax方法发送?

javascript - 如何在同一 HTML 页面上的脚本之间传递 KnockoutJS 模型?

javascript - Knockout.js:将 ViewModel 逻辑与模型分离