2017-08-17 19 views
9

シングルトンビューモデルのAureliaアプリケーションがあります。ビューはファイルブラウザと同様で、左側にツリービュー(カスタム要素)があり、右側にリストビューがあります。ビューモデルactivationStrategyinvokeLifecycleであり、リストビューはルートパラメータに基づいて作成されます。ツリービューには、ノードが展開されたときにAJAX呼び出しが設定されます。ツリーノードはカスタム要素でもあります。ツリー表示は完全にカスタムであり、サードパーティのプラグインは使用しません。Aurelia:シングルトンビューの静的カスタム要素

ユーザーが別のルートに移動してから再び同じルートに戻ると、ビューモデルはシングルトンなので保持されます。ただし、ツリービューは、カスタム要素がシングルトンとしてサポートされていないためではありませんでした。

シングルトンのカスタム要素をサポートしていないという理由を理解しています。しかし、同じルートに戻るときに何らかの理由で「静的な」ツリービューを作成するのに最適な方法は何かを知りたいと思います。私が今までに思いついた唯一のことは、完全な(拡張された)ツリー構造を注入された共有状態に保つことです。しかし、ツリービューは何の理由もなくレンダリングする必要があり、ツリー構造がカスタム要素に暗黙的に組み込まれている間に、ツリー構造を作成するための追加されたクラスとロジックでコードが不必要に複雑になるため、

ご了承ください。

+0

私は、退室して戻った後にカスタム要素を再度レンダリングしない方法はないと思います。ページを離れると、要素が切り離されます。あなたが戻ってくると、再び取り付けられます。 –

答えて

2

私のアプローチは、navigation-skeletonnav-bar.page-hostの外)のようなapp.htmlにツリービューのカスタム要素を配置することです。その後、カスタム要素はルートの変更によって再びレンダリングされるべきではありません。

あなたと同じような状況がAurelia docsに書かれているようです。 this tutorialを参照してください。また、チュートリアルから:

router-viewは、Aureliaによって提供され、ルータが現在のルートをレンダリングする場所を示すプレースホルダです。

特殊な状況やルートに基づいてツリービューを変更する必要がある場合は、イベントアグリゲータをツリービューカスタムエレメントで使用して特別なケースを処理できます。このチュートリアルでは、イベントアグリゲータを使用してカスタムエレメントを同期させる方法も示しています(this part参照)。

これが役に立ちます。

+0

私はあなたの答えに賞金を授与します。たとえそれがハッキリのように感じられるとしても。私はこのシナリオがAureliaの希望リストのためのものだと思います。 – Carvellis

+0

残念なことに、このチュートリアルの例では、1つのビューモデルしか持たない非常にシンプルなアプリケーションなので、問題は解決しません。より多くのビューモデルを追加し、別のルートに移動する場合は、私の例と同じことが起こります。 – Carvellis

+0

@Carvellis私たちのプロジェクトでは、同様のパターンを使用しています。私たちにはサイドバーとサイドバーがあります。これらは両方ともカスタム要素であり、 'router-view'要素の外で標準カスタム要素のように' app.html'に追加されています。そして、これらの要素は経路変更に不可知論的です。より具体的には、要素は1回のみ活性化される。そのため、イベントアグリゲータを使用して変更を同期させる理由もあります。しかし、あなたの要素の具体的な詳細がなければ、これについてもっとコメントするのは難しいです。 –

関連する問題