0

ドロップダウンメニューからのオプションのユーザー選択に依存する、選択された NavigatorContent の可視性で制御される ViewStack を使用しています。

ここに画像の説明を入力

ViewStack の各ビューには、2 ~ 3 個の DataGrid、チャートなどを含む独自の個別の UI 要素があります。これは、各ビューがコースにバインドされ、そのコースの学生の成績を表示する単純な学校のアプリケーションと考えてください (学生をグリッドに一覧表示しながら)。

ただし、データの表示に問題がある場合があります。レンダリングが完了する前に、データを入力する準備ができています。これは、データを入力する必要がある UI 要素がまだ作成されていないため、null 例外をスローします。

このために、「creationPolicy」を「all」に設定しました。このプロパティを設定すると、すべてが正常に機能します。しかし、確かに多くのパフォーマンスの問題があります:-

  1. ユーザーが最初に表示されたビュー以外にアクセスしたことがなくても、他のビューはレンダリングされます (UI 要素が初期化および作成されます)。
  2. 起動時のパフォーマンス ヒット - 起動時間は長く、ビューの数に応じて長くなります (現在、作成ポリシーがすべてに設定された 9 つのビューがあります)。デフォルトで最初のビューのみが表示され、creationPolicyが default/auto に設定されている場合、アプリケーションの読み込みは高速でした
  3. アプリケーションの起動中にUIがハングする/応答しなくなる(すべて同じスレッドで発生するため)

これに対する可能な解決策は何ですか。

これらは私が念頭に置いていた解決策であり、1つか2つの理由で機能しませんでした:-

  • ドロップダウン コントローラーを介してビューが初めて選択されたとき (つまり、レンダリングと UI の作成がまだ行われていないとき)、プリローダーを表示することができます。これを試してみましたが、UI がまだハングするか、応答しなくなります。
  • CallLater は役に立ちますか? 必要がない場合でも、すべてのビューを作成しているので、そうではありません。

そのため、ビューが作成/インスタンス化されたときにビューを表示する (そして何らかの進行状況やローダーを表示する) エレガントな方法が必要です。

アップデート

UI 要素のレンダリングが完了する前に処理 (UI コンポーネントに入力されるデータを返す、グリッドなど) が完了すると、一種の競合状態がある場合に Null エラーが発生します。最初は、作成ポリシーをデフォルトに設定していたので、使用してビューを選択すると、その時点で作成されました。ビューの要素が作成される前に入力されるデータが返された場合、null ポインターがありました (参照するために使用する UI 要素がまだ作成されていたため、そのインスタンスでは null でした)。現在、すべてのビューに対して UI が作成されるように、creationPolicy を all に設定する必要があり、ドロップダウンからそのビューを選択するとデータ処理が開始されます。

私がやりたいのは、オンデマンドで UI を作成する方法を用意することです (使用されていない場合でも、UI のすべてではありません)。

4

2 に答える 2

3

おそらく、データ処理で結果をプッシュするべきではありませんが、逆に、UI コントロールの準備が整ったら、UI でモデルからデータをプルする必要がありますか?

たとえば、DataGrid にバインドする ArrayCollection にデータを格納します。そうすれば、誰が最初に終了しても問題ありません。データ ジェネレーターは、誰がどこに表示するかを知る必要さえありません。データが変更されたことを ArrayCollection が通知するとすぐに、UI にデータが表示されます。

于 2013-08-25T13:11:52.393 に答える