使用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');
...
}
...
})
})
有没有更好的方法在状态之间传递此参数?
答案 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。