0

我有一个带有一组单选按钮的页面,这些单选按钮是根据页面上下拉菜单的选择通过剔除动态创建的。这一切正常,但我遇到的问题是,如果单选按钮由于下拉列表的变化而被删除,单选按钮上的“已检查”绑定似乎不会被清除。这给我留下了一个带有“已检查”值的 ViewModel,而实际上视图上没有任何东西被检查(或者至少没有任何东西可以看到)。

我期望发生的是,一旦单选按钮被删除,选中的绑定将返回为空,但我只能假设如果从 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 遗漏的东西?

4

1 回答 1

1

我将此片段添加到您的视图模型中以获得您想要的行为:

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

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

于 2013-09-11T10:51:51.480 回答