ノックアウトを使用するように設定されたJavaScriptビューモデルがあり、そのビューモデル内に2つのビューモデルがあり、ページのコンテキストでデータバインディングがあります。そのため、あるビューモデルが「with」バインディングでページのセクションにバインドされ、別のビューモデルが「with」バインディングで別のセクションにバインドされるようにページを設定しました。現在、クリック イベントの後にページ上の 1 つのアイテムが $root (コンテナ ビューモデル) にバインドされ、他のビューモデル ( 「with」バインディングがあるページ)。私が呼び出す「ルート」のメソッドで、「var self = this」となるように設定し、他のビューモデルで編集する必要があるプロパティを編集します。
$parent または $root 呼び出し内から現在取得しているもの以外にスコープを変更する方法はありますか? スコープを特定のビューモデルではなく、コンテナ オブジェクトのスコープにしたいだけです。
コード例 (TypeScript):
class Container
{
viewModelA = new ViewModel();
viewModelB = new ViewModelB();
clickMe(){
var self = this;
console.log(self);
self.viewModelB.property("yes");
}
}
<span data-bind="with: viewModelA"> <button data-bind="event: {click: $root.clickMe}" /></span>
console.log は viewModelA を出力し、その self.viewModelB 呼び出しでエラーが発生します。