ノックアウトJSにはDOM全体のバインディング数を記録する変数がありますか?ノックアウトの総バインディング数をカウントする
私は複雑なアプリケーションを持っており、私のクリーンアップ/破壊コードがその仕事をしているかどうかを見たいと思っています。ビュー間をクリックしてバインディングの総数を確認すると、実際に役立ちます。
ノックアウトJSにはDOM全体のバインディング数を記録する変数がありますか?ノックアウトの総バインディング数をカウントする
私は複雑なアプリケーションを持っており、私のクリーンアップ/破壊コードがその仕事をしているかどうかを見たいと思っています。ビュー間をクリックしてバインディングの総数を確認すると、実際に役立ちます。
すぐに使用できる方法があるかどうかはわかりませんが、そうでない場合は、各バインディングハンドラのinit
機能を単純に上書きしてたとえば、バインディング名を配列に追加します。
init
を元のハンドラに委任できます。あまりにも多くのバインディングハンドラが組み込まれているわけではないので、すぐに使用できるソリューションがない場合には、これはあまりにも圧倒的ではありません。これの実例はthis fiddleにあります。
基本的に、バインディングが初期化されるたびに、バインディング名を配列に追加します。単純にカウンターをインクリメントすることもできますが、実際のバインディングが何であるかについてはあまり説明しません。さらに、提供されたフィドルでコンソールに記録されている配列を観察すると、実際のバインディングが明示的に作成されたものより少し高いことがわかります(例えば、evennt
バインディングをclick
バインディング、など)。この目的のために、実際のバインディング名を配列に追加することはもう少し解明の解決策です。
binding is get rid ofの場合は、必ずカウンタの値を減らしてください。これはko.utils.domNodeDisposal.addDisposeCallback(...)
の機能です。
また、スクリプトの参照順序にも注意してください。このコードは、各バインディングハンドラの後にを実行する必要があります。使用する/保持したいバインディングハンドラはインポートされていますが、実際のバインディングが作成される前にです。したがって、最も単純なケースでは、ko JavaScriptファイルをインポートし、次にすべてのカスタムバインディングをインポートし、次にこのコードを含むスクリプトファイルをインポートします。バインディングは、これらの処理が完了した後にのみ適用する必要があります。
いくつかのバインディングが '{controlsDescendantBindings:true}'を返す必要があるので、 'originalHandler.init'の値を返すことを忘れないでください。 – user3297291