我有一个带有一组单选按钮的页面,这些单选按钮是根据页面上下拉菜单的选择通过剔除动态创建的。这一切正常,但我遇到的问题是,如果单选按钮由于下拉列表的变化而被删除,单选按钮上的“已检查”绑定似乎不会被清除。这给我留下了一个带有“已检查”值的 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 遗漏的东西?