1

我正在使用 StateManager 来控制弹出模式的状态(例如,状态是“open.edit”、“open.show”和“close”)。我想在这里使用状态管理器,因为模式非常复杂并且需要它自己的事务(我使用的是 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

在我们的一个应用程序中,我们有一个 PanelManager(StateManager 的子类)来处理我们的模态状态。还有一个 PanelController,它具有我们的面板容器视图绑定到的类名和可见性的属性。当从关闭状态转换到特定打开状态(例如,showingEditPanel)时,管理器设置类名和可见性属性并调用 panelController 上的 connectOutlet 以在面板容器中显示正确的视图/控制器组合。额外的复杂性可以用每个打开状态下的嵌套状态来建模。

于 2012-12-05T13:16:54.550 回答