Knockout从值列表中更新复选框数组

时间:2012-07-18 07:28:20

标签: knockout.js

我有一个表单,可以添加新人记录,也可以编辑他们的记录。

因此,当它是新记录时,表单会显示一个未经检查的复选框列表,这些复选框与其资格相对应。他们毫无困难地保存回数据库。

当我想编辑人员数据时,我可以将他们的资格作为资格ID的分隔列表。因此,我想检查表单上的相应复选框。

我想有一个映射/更新功能需要用该人的数据更新obsevable checkbox数组。

我已经设置了一个基本jsFiddle,但缺少重要的一点。

我想知道有人能指出我正确的方向吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

以下自定义绑定最初由另一个用户RPNiemeyer发布,但目前我无法检索答案。 无论如何,你可以找到它:

自定义绑定称为“checkedWithInit”,此处HTML元素的checked属性设置为true,只是为了清楚:

<input id="yourId" type="checkbox" value="yourValue" data-bind="checkedWithInit: yourInitialStateVariable" checked="true" />

自定义绑定代码是元素的“init”事件处理程序的“覆盖”

ko.bindingHandlers.checkedWithInit = {
        init: function(element, valueAccessor, allBindingsAccessor, context) {
        var value = valueAccessor();
        if (element.checked) {
            //if it is an array then push this value to it
            if (value.push) {
                value.push(element.value);                 
            } else { //otherwise, just write the value
                if (ko.isWriteableObservable(value)) {
                    value(element.checked);   
                }
            }
        }
        //run the real checked binding's init function
        ko.bindingHandlers.checked.init(element, valueAccessor, allBindingsAccessor, context);
        },
        //always run the checked bindings update function
        update: ko.bindingHandlers.checked.update
    };

我希望这有帮助,

瓦莱里奥