Knockout.js 绑定文本中的双向检查绑定(如computedObeservable)

Knockout.js 绑定文本中的双向检查绑定(如computedObeservable),knockout.js,Knockout.js,我必须以不同的方式编写和读取单选按钮的选中绑定,就像使用计算绑定一样。我不想把ViewModel和每个单选按钮的计算观察值弄乱。所以我试图控制标记中绑定文本之外的绑定。也许通过一个例子可以更清楚地说明这一点 例如: 用户应该能够使用单位设置值。他可以选择单位并设置值。有一个通用值,用户可以选择(单选按钮)。不过,应该可以写入特定值(输入)。这里是标记(我的itention是通过“绑定”来表示的,选中读,选中写) ... 这样做可能吗?如果您在无线电输入上设置了值属性,那么Knockout将根

我必须以不同的方式编写和读取单选按钮的选中绑定,就像使用计算绑定一样。我不想把ViewModel和每个单选按钮的计算观察值弄乱。所以我试图控制标记中绑定文本之外的绑定。也许通过一个例子可以更清楚地说明这一点

例如: 用户应该能够使用单位设置值。他可以选择单位并设置值。有一个通用值,用户可以选择(单选按钮)。不过,应该可以写入特定值(输入)。这里是标记(我的itention是通过“绑定”来表示的,选中读,选中写)


...

这样做可能吗?

如果您在无线电输入上设置了
属性,那么Knockout将根据它设置您的可观察值。从您发布的示例中,我相信您应该能够使用标准的
checked
绑定来对可观察对象进行绑定。比如:

<div data-bind="foreach: values">
    <input type="radio" name="valuRadios" value="0.25" data-bind="attr: { value: $data }, checked: $parent.myValue" />
    <label data-bind="text: $data"></label>
</div>

<input data-bind="value: myValue" />

 <div data-bind="text: myValue"><div>
ko.bindingHandlers.specialChecked = {
    init: function(element, valueAccessor) {
       var original = valueAccessor();

        var filter = ko.computed({
            read: function() {
                //return original() or some modified version of it
            },
            write: function(newValue) {
                //write to original(newValue) or modify newValue first
            },
            disposeWhenNodeIsRemoved: element
        });

        ko.applyBindingsToNode(element, { checked: filter });
    }
};
此处示例:

如果场景稍微复杂一点,那么我将使用的策略是创建一个自定义绑定,该绑定基于原始可观察对象生成一个计算值,然后使用这个新的计算值绑定元素,如下所示:

<div data-bind="foreach: values">
    <input type="radio" name="valuRadios" value="0.25" data-bind="attr: { value: $data }, checked: $parent.myValue" />
    <label data-bind="text: $data"></label>
</div>

<input data-bind="value: myValue" />

 <div data-bind="text: myValue"><div>
ko.bindingHandlers.specialChecked = {
    init: function(element, valueAccessor) {
       var original = valueAccessor();

        var filter = ko.computed({
            read: function() {
                //return original() or some modified version of it
            },
            write: function(newValue) {
                //write to original(newValue) or modify newValue first
            },
            disposeWhenNodeIsRemoved: element
        });

        ko.applyBindingsToNode(element, { checked: filter });
    }
};

非常感谢。好吧,这比我想象的要简单。另外,在我的情况下,定制绑定的策略是不需要的,不过这是一个很好的例子。谢谢。也许以后会对我有帮助。