使用挖空映射库检查无线电输入的绑定

时间:2013-06-14 13:41:14

标签: knockout.js knockout-mapping-plugin

非常简单的data-bind="checked: someBool"没有检查我的无线电输入。

<input type="radio" data-bind="checked: someBool" />radio

ko代码......

var data = { someBool: true };
var vm = ko.mapping.fromJS(data);
ko.applyBindings(vm);

收音机未经检查。我错过了什么吗?

直播:http://jsbin.com/exokav/4/edit

1 个答案:

答案 0 :(得分:0)

您需要为要映射的单选按钮添加值属性。此值也不是布尔值,而是此后的字符串。我使用以下扩展名来为单选按钮使用布尔值。 (实况:http://jsbin.com/exokav/8):

ko.bindingHandlers.checkedAsBool = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        var observable = valueAccessor(),
            interceptor = ko.computed({
                read: function () {
                    var val = ko.utils.unwrapObservable(observable);
                    return ((val !== null) && (typeof val !== "undefined") ? val.toString() : val);
                },
                write: function (newValue) {
                    observable(newValue === "true");
                },
                owner: this
            });
        ko.applyBindingsToNode(element, { checked: interceptor });
    }
};

根据RP Niemeyer的this回答。