Binding 如果删除单选按钮,则取消选中绑定不会更新

Binding 如果删除单选按钮,则取消选中绑定不会更新,binding,knockout.js,radio-button,Binding,Knockout.js,Radio Button,我有一个带有一组单选按钮的页面,该按钮是根据页面上下拉菜单的选择,由knockout动态创建的。这一切都很好,但我的问题是,如果由于下拉列表的更改而删除单选按钮,则单选按钮上的“选中”绑定似乎不会被清除。这就给我留下了一个ViewModel,它的值为“checked”,而实际上视图上没有任何内容被选中(或者至少没有任何可见内容) 我希望发生的是,一旦删除单选按钮,选中的绑定将返回为null,但我只能假设如果从DOM中删除单选按钮,绑定不会得到更新 您可以在上看到这种情况-基本上,如果您选择一个单

我有一个带有一组单选按钮的页面,该按钮是根据页面上下拉菜单的选择,由knockout动态创建的。这一切都很好,但我的问题是,如果由于下拉列表的更改而删除单选按钮,则单选按钮上的“选中”绑定似乎不会被清除。这就给我留下了一个ViewModel,它的值为“checked”,而实际上视图上没有任何内容被选中(或者至少没有任何可见内容)

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

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

HTML:


有没有办法让它像我预期的那样工作,或者这只是击倒中遗漏的东西?

我将此片段添加到您的viewmodel中,以获得您想要的行为:

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

更新后的小提琴:

您应该在
selectedParent
更改上
subscribe
,而不是创建一个计算的:
selectedParent.subscribe(函数(){selectedChild(“”);})是的,这更有意义。把它作为一个答案,因为它是一个比我更好的解决方案。是的,这两种解决方案似乎都有效。我确实想知道这是否必要,击倒赛本身不就应该知道这一点吗?此外,我不确定这是否会在以后引起问题,特别是如果viewmodel中的某些内容同时依赖于selectedParent和selectedChild。不过,它现在仍然有效,所以谢谢。
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,
};
};
// create internal computed
ko.computed(function() {
    // add dependency to selectedParent
    var s = selectedParent();
    // reset selectedChild
    selectedChild('');
});