我设置了一个父子视图模型对象结构,需要从子节点更新父节点的 observable。我基本上提出了两种模式:
1]将父属性的引用传递给孩子并从孩子内部更新属性:
var ParentViewModel = function(){
var self = this;
this.selectedItem = ko.observable();
this.child = ko.observable(new ChildViewModel(self.selectedItem));
}
var ChildViewModel = function(parentSelectedItem){
var self = this;
this.id = ko.observable();
this.parentSelectedItem = parentSelectedItem;
this.select = function(){
self.parentSelectedItem(self);
}
}
2]在父节点上创建子节点的select方法,并在本地引用父节点observable:
var ParentViewModel = function(){
var self = this;
this.selectedItem = ko.observable();
var child = new ChildViewModel();
child.select = function(){
self.selectedItem(child);
}
this.child = ko.observable(child);
}
var ChildViewModel = function(){
this.id = ko.observable();
}
这些模式都没有让我兴奋不已。第一个将整个属性引用推送到子视图模型中,第二个定义了子范围之外的子函数。
关于如何以干净和可测试的方式在 javascript 中实现此操作,是否有人有任何其他模式建议?还是我或多或少只停留在这两个选项上?