我有 knockout.js 子视图模型,observableArray
它们依赖于observable
父视图模型。父级observable
绑定到select
下拉列表,子级需要知道该值何时更改。
我已经传递了整个父视图模型,只是observable
, 并且还在父级内部订阅了observable
,以便“手动”更新子级。所有这些都用于绑定目的。
问题是,如果我随后清除孩子observableArray
为新孩子腾出空间,或者简单地用新孩子替换孩子,那么旧孩子会留在内存中,因为它们仍然被敲除.js 设置的反向依赖项引用。
我对不同的设计模式或告诉淘汰赛停止依赖依赖项的方法持开放态度。在另一个示例中,我尝试了 cleanNode() ,但这似乎并没有清除这些反向依赖项。
代码:
function FamilyViewModel(name) {
this.name = name;
this.children = ko.observableArray();
}
function ChildViewModel(firstName, lastName, selectedFamilyObservable) {
this.firstName = ko.observable(firstName);
this.lastName = ko.observable(lastName);
this.fullName = ko.computed(function() {
return this.firstName() + " " + this.lastName();
}, this);
this.isSelected = ko.computed(function() {
return selectedFamilyObservable().name == this.lastName();
}, this);
}
function PageViewModel() {
this.families = ko.observableArray([
new FamilyViewModel("Smith"),
new FamilyViewModel("Jones"),
new FamilyViewModel("Brown")
]);
this.selectedFamily = ko.observable();
this.addChild = _.bind(function() {
this.selectedFamily().children.push(new ChildViewModel("Frank", this.selectedFamily().name, this.selectedFamily));
}, this);
this.resetChildren = _.bind(function() {
this.selectedFamily().children([]);
}, this);
}
$(function() {
ko.applyBindings(new PageViewModel());
});
小提琴: