1

私は現在、コントロール パネル アプリケーションに取り組んでいます。このアプリケーションでは、各ツールが独自の Javascript ファイルをロードし、そのほとんどに Knockout バインディングが含まれています。Knockout 自体はドキュメント ヘッドにロードされますが、ツールは #body div に非同期でロードされるため、別のツールがロードされた後も要素が引き続きバインドされることが懸念されます。同じ要素が複数回バインドされている場合、これによりメモリリークが発生し、おそらくいくつかの不具合が発生すると思います。新しいツールをロードする前に、すべての Knockout バインディングを一度にクリアすることはできますか?

4

1 に答える 1

3

私が推奨する一般的なパターンは次のようなものです。

//obviously doesn't have to be an object literal
var viewModel = {
  currentTool: ko.observable()
};

ko.applyBindings(viewModel);

次に、次のようにページをバインドします。

<div data-bind="with: currentTool">
     ...content here
</div>

これで、ページが最初にバインドされるとき、領域currentToolは未定義としてレンダリングされませんが、KO は子をコピーして「テンプレート」として使用します。

オブザーバブルにデータを入力するcurrentToolと、要素のコピーがレンダリングされ、コンテンツがバインドされます。

を変更するcurrentToolと、KO は既存のバインディングと要素をクリーンアップし、要素の新しいコピーをレンダリング/バインドします。

したがって、一度呼び出すだけで、表示したいものに基づいko.applyBindingsて更新を続けることができます。currentTool

于 2013-04-03T18:21:32.267 に答える