Emberjs回去取消

时间:2015-03-02 17:40:51

标签: ember.js

我有从各种屏幕显示的用户链接(来自用户列表,用户组等)。单击链接时,将显示用户进行编辑。当在编辑表单中按下取消按钮时,我想转换到上一个屏幕用户列表/组。如何在Emberjs中实现这一目标。

谢谢, 穆拉利

3 个答案:

答案 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已经给你的willTransitiongoBack你定义自己。然后,有一个"全球"您跟踪的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