StateManager を使用して、ポップアップ モーダルの状態を制御しています (たとえば、状態は「open.edit」、「open.show」、および「closed」です)。モーダルは静かで複雑で、独自のトランザクションを必要とするため、ここで状態マネージャーを使用したいと思います (私は Ember データを使用しています)。
ModalStateManager で適切なデータ、ビュー、およびコントローラーを設定できます。
ただし、ビュー (この場合は App.ModalView) は DOM でレンダリングされません。これは、ログ ステートメントを App.ModalView の didInsertElement 関数に配置したため、ログに記録されないためです。
誰かがボタンをクリックしてモーダルを開いたときに、ビューをレンダリングするにはどうすればよいですか?
誰かがクリックしてモーダルを開いたときに ModalStateManager で実行されるコードを次に示します。
App.ModalStateManager = Ember.State.create({
closed: Ember.State.create({
open: function(manager, modalData) {
var view = App.router.get('applicationController').connectOutlet("modal", modalData);
//this is working
//the view returned is the ModalView; it has a ModalController with expected content
manager.transitionTo('open.show');
}
})
//omitting other states for simplicity
)}
より大きな問題: 複数の状態と動的データを持ち、ルーター内に独自の URL または状態を持たないビューをどのように作成する必要がありますか? たとえば、ユニークなアイテムのリストを含むページを想像してください。アイテムをクリックすると、アイテムのコンテンツを表示するモーダルが開き、ユーザーはそれを編集して保存できます。モーダルには、ルーターに独自の URL や状態がないため、/:item_id
簡単に接続して更新できるルーターに動的状態を設定するほど簡単ではありません。