3

ノックアウトを使用するように設定された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 呼び出しでエラーが発生します。

4

1 に答える 1