親子ビュー モデル オブジェクト構造が設定されており、親のオブザーバブルを子から更新する必要があります。私は基本的にそうするための2つのパターンを考え出しました:
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 メソッドを作成し、親のオブザーバブルをローカルで参照します。
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();
}
これらのパターンはどちらも私を真っ逆さまに送りません。1 つ目はプロパティ参照全体を子ビュー モデルにプッシュし、2 つ目は子のスコープ外で子の関数を定義します。
この操作をJavaScriptでクリーンでテスト可能な方法で実現する方法について、他のパターンの提案はありますか? それとも、多かれ少なかれこれら 2 つのオプションだけで行き詰っていますか?