我有一个页面,其中包含一组单选按钮,这些单选按钮是根据页面上下拉列表的选择由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遗漏的东西?
答案 0 :(得分:1)
我将此代码段添加到您的viewmodel以获取您想要的行为:
// create internal computed
ko.computed(function() {
// add dependency to selectedParent
var s = selectedParent();
// reset selectedChild
selectedChild('');
});