1

私の Durandal アプリケーションでは、いくつかの親ルーターを構成しており、その一部には子ルーターが構成されています。問題は、ユーザーが異なる親ページまたは子ページ間を移動すると、既存のルートのバインディング ライフサイクルと共に、前のルートのバインディング ライフサイクルもトリガーされることです。

デュランダルのドキュメントに記載されているように、子ルーターは親ビュー モデル内で構成され、親ルーターはshell.tsで構成されます。

shell.ts のルーター データ バインド プロパティで、属性cacheViewsfalseに、alwaysTriggerAttachtrueに指定しました。

<div data-bind="router:{cacheViews: false, alwaysTriggerAttach: true}"></div>

期待される結果は、現在のルートが読み込まれているときに、前のルートのバインディング ライフサイクルが読み込まれないことです。たとえば、 #P2 から #P1/C1 に移動する場合、 #P2バインディングライフサイクルは読み込まれません。

4

1 に答える 1

0

十分な詳細が得られないと、この質問に正しく答えるのが難しくなります。しかし、DOM から削除された domElements には、まだ eventHandlers がアクティブになっているようです。http://durandaljs.com/documentation/api#class/Router/method/resetを調べて使用してみましたか?

ノックアウトのデフォルトの動作では、DOM 要素が DOM から削除されても、eventHandlers はアクティブな状態でアタッチされたままになり、デフォルトでは削除されません。

ルーター bindingHandler の init メソッド内で、以下を試して、修正されるかどうかを確認します

   ko.utils.domeNodeDisposal.addDisposeCallback(element,()=>{
   //do whatever you want here. like cleanup //reset(), etc
   })

https://knockoutjs.com/documentation/custom-bindings-disposal.html

于 2019-09-13T01:29:04.460 に答える