在Ember.StateManager中的状态之间传递参数

时间:2012-05-15 01:24:03

标签: ember.js

使用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');
      ...
    }
    ...
  })
})

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

2 个答案:

答案 0 :(得分: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 }]);

答案 1 :(得分:1)

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

您的大部分答案都在Ember.StateManager documentation

在Ember中有一个关于goToState()方法here中的额外参数的拉取请求,但它已被关闭,因为goToState()只应在内部as joewest says here与tomdale一起使用:

  只应在州内调用goToState。要实现这一点,只需实现一个带有其他参数的动作,并让它为你调用goToState。