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