Ember.StateManager のドキュメントでは、次のように述べられています。アクションメッセージを送信すると、必然的に別の状態に遷移する必要があるということですか。同じ状態にとどまり、アクションを送信して何らかのタスクを実行することは可能ですか? たとえば、「読み込み中」の状態で、「前処理」と「表示」の 2 つのアクションを実行するとします。
2 に答える
簡単に言うと、アクション メッセージは別の状態に遷移する必要はありません。
あなたが尋ねたわけではありませんが、関連していて重要なことです。 orメソッドを呼び出すgoToState
のは悪い考えであり、悪い設計です。enter
exit
一般的にステートチャートを扱うときは、好きなことをすることができます。イベント ハンドラーで状態を切り替えることは必須ではありません。一般的なケースは、キャンセル/保存ダイアログを表示するイベント ハンドラーです。ダイアログをページのイベント ハンドラーに簡単に配置し、押されたボタンに応じて処理を進めることができます。
別の問題は、すべてのイベント ハンドラーが基本的に別の状態に移行する必要があるということです。上記のシナリオでは、確実に「確認」状態に移行できます。state-enter メソッドはダイアログを表示し、ボタンごとに 1 つずつ、2 つのハンドラーがあります。これらのハンドラーは、他の州に移動します。
少なくともそのシナリオでは、どちらのデザインの選択も等しく有効だと思います。 アクションごとに個別の状態を実装することを選択した 場合、多くの小さいが簡潔な状態になってしまいます。イベント ハンドラー自体で何かを行うことを選択した場合、状態は大きくなりますが、状態は少なくなります。
1 つ言えることは、イベント ハンドラーが複雑になっている場合は、おそらく新しい状態を使用した方がよいということです。また、一貫性を保ちます。
特定のシナリオでは、私が正しく読んでいれば、データをロードしてから、イベントに基づいてデータを表示するように表示を変更したいと考えています。この場合、新しい状態を使用します。
だからあなたはプロセスを開始するボタンを押します
- イベント ハンドラーで、ある種の「MyDataSection」状態に移動します。
- 初期サブステートは「loadData」
- 'loadData' の Enter state メソッドはロード プロセスを開始します
- データのロード時に処理する「loadData」内のイベント ハンドラ「dataLoaded」。これは、データがロードされたときにイベントを発生させる必要があることを意味します
- 「dataLoaded」イベントは「表示」状態になります
- show state は、ビューを表示 (またはアクティビティ インジケーターなどを削除) し、ディスプレイからのイベントを処理します。
ここで良いのは、アプリのこのセクションに到達する方法が複数ある場合、このセクションにつながるすべてのアクションはこの状態に移行するだけでよく、すべてが常に同じように行われることです。また、ビュー イベント ハンドラーは show 状態であるため、データの読み込み中にユーザーがボタンを押しても何も起こらないことに注意してください。