1

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簡単に接続して更新できるルーターに動的状態を設定するほど簡単ではありません。

4

1 に答える 1

2

アプリの 1 つに、モーダルの状態を処理する PanelManager (StateManager のサブクラス) があります。また、パネル コンテナー ビューが className と可視性のためにバインドするプロパティを持つ PanelController もあります。閉じた状態から特定の開いた状態 (たとえば、showingEditPanel) に移行するとき、マネージャーはクラス名と可視性のプロパティを設定し、panelController で connectOutlet を呼び出して、パネル コンテナー内に正しいビュー/コントローラーの組み合わせを表示します。追加の複雑さは、各オープン状態の下にネストされた状態でモデル化できます。

于 2012-12-05T13:16:54.550 に答える