我有从各种屏幕显示的用户链接(来自用户列表,用户组等)。单击链接时,将显示用户进行编辑。当在编辑表单中按下取消按钮时,我想转换到上一个屏幕用户列表/组。如何在Emberjs中实现这一目标。
谢谢, 穆拉利
答案 0 :(得分:23)
你只需要
history.back()
Ember的主要设计目标之一,实际上是大多数OPA框架,是与浏览器的历史堆栈协调工作,以便back
"正常工作"。
因此,您不需要维护自己的迷你历史堆栈,全局变量或转换挂钩。
您可以在应用程序路由器中添加back
操作,操作将从任何地方冒出来,这样您就可以在任何模板中简单地说{{action 'back'}}
而无需进一步操作。
答案 1 :(得分:4)
这是我的解决方案,非常简单和高性能。
// file:app/routers/application.js
import Ember from 'ember';
export default Ember.Route.extend({
transitionHistory: [],
transitioningToBack: false,
actions: {
// Note that an action, like 'back', may be called from any child! Like back below, for example.
willTransition: function(transition) {
if (!this.get('transitioningToBack')) {
this.get('transitionHistory').push(window.location.pathname);
}
this.set('transitioningToBack', false);
},
back: function() {
var last = this.get('transitionHistory').pop();
last = last ? last : '/dash';
this.set('transitioningToBack', true);
this.transitionTo(last);
}
}
});

答案 2 :(得分:2)
可能有一种方法可以干这个(不要重复自己),但是这样做的一种方法就是有2个动作:Ember已经给你的willTransition
和goBack
你定义自己。然后,有一个"全球"您跟踪的lastRoute
变量如下:
App.OneRoute = Ember.Route.extend({
actions: {
willTransition: function(transition){
this.controllerFor('application').set('lastRoute', 'one');
},
goBack: function(){
var appController = this.controllerFor('application');
this.transitionTo(appController.get('lastRoute'));
}
}
});
您的模板如下所示:
<script type="text/x-handlebars" id='one'>
<h2>One</h2>
<div><a href='#' {{ action 'goBack' }}>Back</a></div>
</script>
工作示例here