如果删除了单选按钮,则Knockout检查绑定不会更新

时间:2013-09-11 10:25:31

标签: binding knockout.js radio-button

我有一个页面,其中包含一组单选按钮,这些单选按钮是根据页面上下拉列表的选择由knockout动态创建的。这一切都运行正常,但我遇到的问题是,如果由于下拉列表的更改而删除了单选按钮,则单选按钮上的“已检查”绑定似乎不会被清除。这给我留下了一个ViewModel,其值为“checked”,实际上视图中没有任何内容被检查(或者至少没有任何东西可以看到)。

我期望发生的是,一旦删除单选按钮,检查的绑定将返回为null但我只能假设如果从DOM中删除单选按钮,绑定不会更新。

您可以在jsfiddle上看到这种情况 - 基本上如果您选择单选按钮然后更改下拉列表,则所选值仍将引用现在已删除(因此未选中)的单选按钮。

HTML:

<ul data-bind='foreach: availableChildren'>
<li>
    <label>
        <input type="radio" name="children" data-bind="checked: $root.selectedChild, value: id" /><span data-bind="text: name"></span>

    </label>
</li>

视图模型:

var ViewModel = function (settings) {

var availableParents = ko.observableArray(settings.parents),
    selectedParent = ko.observable(),

    availableChildren = ko.computed(function () {
        if (!selectedParent()) {
            return null;
        }
        return selectedParent().children;
    }),
    selectedChild = ko.observable();

return {
    availableParents: availableParents,
    selectedParent: selectedParent,
    availableChildren: availableChildren,
    selectedChild: selectedChild,
};
};

是否有任何方式让我按照我的预期工作,或者这只是Knockout遗漏的东西?

1 个答案:

答案 0 :(得分:1)

我将此代码段添加到您的viewmodel以获取您想要的行为:

// create internal computed
ko.computed(function() {
    // add dependency to selectedParent
    var s = selectedParent();
    // reset selectedChild
    selectedChild('');
});

您的更新小提琴:http://jsfiddle.net/danne567/avbU7/2/