Emberjs 回去取消
Emberjs go back on cancel
我在各种屏幕(来自用户列表、用户组等)中向用户显示 link。单击 link 时,将显示用户以进行编辑。当在编辑表单中按下取消按钮时,我想转换到上一个屏幕 userlist/group。这在 Emberjs 中通常是如何实现的。
谢谢,
穆拉利
可能有一种方法可以干掉(不要重复自己)这件事,但是一种方法是执行 2 个操作:willTransition
Ember 已经给了你和 goBack
你自己定义。然后,有一个 "global" 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
你只需要
history.back()
Ember 以及大多数 OPA 框架的主要设计目标之一是与浏览器的历史堆栈协调工作,以便 back
"just works".
因此您无需维护自己的迷你历史堆栈、全局变量或转换挂钩。
您可以在您的应用程序路由器中放置一个 back
操作,操作将从任何地方冒泡到该操作,因此您可以在任何模板中简单地说 {{action 'back'}}
,无需再费力。
这是我的解决方案,非常简单且性能高。
// 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);
}
}
});
我在各种屏幕(来自用户列表、用户组等)中向用户显示 link。单击 link 时,将显示用户以进行编辑。当在编辑表单中按下取消按钮时,我想转换到上一个屏幕 userlist/group。这在 Emberjs 中通常是如何实现的。
谢谢, 穆拉利
可能有一种方法可以干掉(不要重复自己)这件事,但是一种方法是执行 2 个操作:willTransition
Ember 已经给了你和 goBack
你自己定义。然后,有一个 "global" 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
你只需要
history.back()
Ember 以及大多数 OPA 框架的主要设计目标之一是与浏览器的历史堆栈协调工作,以便 back
"just works".
因此您无需维护自己的迷你历史堆栈、全局变量或转换挂钩。
您可以在您的应用程序路由器中放置一个 back
操作,操作将从任何地方冒泡到该操作,因此您可以在任何模板中简单地说 {{action 'back'}}
,无需再费力。
这是我的解决方案,非常简单且性能高。
// 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);
}
}
});