1

使用 Ember.StateManager 时,Em.States 之间最常见的转换涉及一些参数。目前,当我使用 goToState 从一个状态转到另一个状态时,我正在使用 StateManager 中的实例变量在状态之间传递参数。这对我来说似乎非常丑陋。没有更标准的参数传递方式是否有原因?或者我应该使用不同的模式。

例如,

App.stateManager = Em.StateManager.create({
  initialState: 'listContacts',
  listContacts: Em.ViewState.create({
    ...
    actionSelectContact: function(manager, context) {
      manager.set('selectedContact', context);
      manager.goToState('showContact');
    }
  }),
  showContact: Em.ViewState.create({
    enter: function(manager, transition) {
      var contactToShow = manager.get('selectedContact');
      ...
    }
    ...
  })
})

有没有更好的方法来在状态之间传递这个参数?

4

2 回答 2

2

Tom Dale 刚刚添加了一个 transitionTo 方法来处理这个问题。transitionTo 接受一个上下文对象以及目标状态的名称。现在在你的行动中,你可以做类似的事情,

viewStates = Ember.StateManager.create({
  showingPeople: Ember.ViewState.create({
    view: ContactListView
  }),

  showDetailAction: function(mgr, selectedPerson) {
    mgr.transitionTo('showingPersonDetail', selectedPerson);
  },

  showingPersonDetail: Ember.ViewState.create({
    setupContext: function(manager, context) {
      this.set('person', context);
    },
    view: PersonDetailView
  })
})

您还可以在此过程中获得更多更好的并传递多个状态的参数,例如,

stateManager.transitionTo(['planters', { company: true }], ['nuts', { product: true }]);
于 2012-05-19T09:55:58.630 回答
1

我不是 Ember 专家,但我认为您可以使用stateManager.send()方法来实现此目的,其中第二个参数将是您想要在状态之间传递的对象。

您的大部分答案都在Ember.StateManager 文档中。

Ember 中有一个拉取请求,讨论了goToState()方法中的额外参数here,但它已被关闭,因为它goToState()只能在内部使用,正如 joewest 在这里与 tomdale 所说的一样:

goToState 只能从一个状态中调用。为此,只需实现一个带有附加参数的操作,并让它为您调用 goToState。

于 2012-05-15T16:44:39.613 回答