0

4 つのタブを持つタブ付きダイアログがあります。親コンポーネントは mx:TabNavigator で、タブの各ビューは s:NavigatorContent 内のカスタム MXML コンポーネントです。3 つのタブのデータを 1 つの単位としてバックエンド サービスに送信する必要があります。3 つのタブが 1 つのユニットとして送信されるデータにアクセスできるようにする最善の方法を見つけようとしています。現在、最上位の mx:TabNavigator を定義する .mxml ファイルが 1 つあります。4 つのタブのそれぞれは、独自の個別の .mxml ファイルで定義された s:NavigatorContent を表し、ファイル サイズをかなり短くします。私の現在のアプローチは、各タブがバックエンド サービスからデータを creationComplete ハンドラーにロードし、それを 3 つのタブで共有されるデータ モデルの共通クラスに格納することです。このソリューションは、次を除いて問題ありません。

  1. 最初のタブの作成完了ハンドラーは、それが最初に表示されるコンポーネントではない場合でも、アプリケーションの起動時に呼び出されます (つまり、ユーザーが最初に表示する UI の他の部分があります)。タブがユーザーに表示されるまでデータが読み込まれない、真の遅延読み込みを使用したいと思います。
  2. ユーザーが最初のタブでデータを編集し、適用ボタンを押さずに 2 番目のタブに初めて移動すると、2 番目のタブの作成完了ハンドラーが共有されたデータ モデルをロードするため、最初のタブで行われた変更は失われます。 3つのタブで。

私が理想的に欲しいのは:

  1. 真の遅延読み込み; ユーザーがタブをクリックして表示されるまで、データはロードされません。
  2. ユーザー ヒットが 3 つのタブのいずれかに適用されると、3 つのタブのそれぞれの現在のエントリがバックエンド サービスに送信されるようにします。

誰かがこれについてアドバイスできるなら、どうもありがとう。必要に応じて、さらに詳しく説明できます。

4

1 に答える 1

1

3 つのタブが 1 つのユニットとして送信されるデータにアクセスできるようにする最善の方法を見つけようとしています。

ベストは常に主観的です。最も簡単な方法は、共有データ用に 1 つの変数を作成し、そのインスタンスを関連する各タブに渡すことです。

場合によっては、データを中央の場所に保存し、依存関係の挿入を使用して、そのデータを必要とする関連するタブ コンポーネントに挿入することもできます。依存性注入は、RobotLegs や Swiz などの一連の Flex フレームワークによって実装されます。

別のオプションは、クラスでシングルトン アプローチまたは静的変数を使用して、複数のタブ間でデータを共有することです。

私の現在のアプローチは、各タブが作成完了ハンドラーでバックエンド サービスからデータをロードすることです。

creationComplete を使用する理由 creationComplete イベントは、コンポーネントがそのレイアウト ルーチンとその子のレイアウト ルーチンを完了した後に発生し、すべてを使用する準備が整います。より多くのデータをロードする行為は、多くのコンポーネントがレンダリングプロセスを再度実行しなければならなくなると思います。初期化や事前初期化など、ライフサイクル中にこれを以前の場所に移動することを検討してください。

1) 最初のタブの作成完了ハンドラーは、最初に表示されるコンポーネントではなくても、アプリケーションの起動時に呼び出されます (つまり、ユーザーが最初に表示する UI の他の部分があります)。タブがユーザーに表示されるまでデータが読み込まれない、真の遅延読み込みを使用したいと思います。

これは、TabNavigator の初期化方法に基づいて、予期される動作です。詳細については、creationPolicy を参照してください。「データのロード」メソッドを書き直して、コンポーネントの show メソッドで動作するようにできますか?

2) ユーザーが最初のタブでデータを編集し、適用ボタンを押さずに 2 番目のタブに初めて移動すると、2 番目のタブの作成完了ハンドラーがデータをロードするため、最初のタブで行われた変更は失われます。 3 つのタブで共有されるモデル。

コンポーネントの非表示イベントでデータの保存を強制できます。または、TabNavigator の変更イベントで発生する可能性があります。

于 2012-04-25T16:10:28.893 に答える