访问ember中的浏览历史记录

时间:2013-06-17 07:47:03

标签: testing ember.js url-routing html5-history

我在应用程序中有以下两个路径来编辑对象( node ):

  1. 列表节点 - >点击编辑图标
  2. 列表节点 - >选择节点 - >点击编辑按钮
  3. 我可以选择取消编辑。当我取消时,我想让路由器(控制器?)回到正确的位置。也就是说,如果我来自节点列表,我希望取消返回“节点列表”(#nodes)。如果我来自节点视图,我希望取消返回节点视图(#nodes/show/node-id)。目前,这是我的NodesEditController

    中的实施
    SettingsApp.NodesEditController = Ember.ObjectController.extend({
        needs: ['nodesIndex'],
        selectedNode: null,
        selectedNodeType: null,
        nodes: [],
        ...
        cancel: function () {
            this.stopEditing();
            this.transitionToRoute('nodes.show', this.get('content'));
        },
    
        ...
    });
    

    如您所见,cancel操作的路线已修复(nodes.show)。但在第一种情况下,我想做this.transitionToRoute('nodes.index');。所以我的cancel方法必须是这样的:

     cancel: function () {
        this.stopEditing();
        if (some_test) { this.transitionToRoute('nodes.show', this.get('content'));
        } else { this.transitionToRoute('nodes.index'); }
     }
    

    如何实施some_test?我可以测试什么来了解我如何到达当前路线?

1 个答案:

答案 0 :(得分:1)

在退出路线时重新打开Ember.Route以存储currentPath

Ember.Route.reopen({
  deactivate: function() {
    var applicationController = this.controllerFor('application');
    App.previousPath = applicationController.get('currentPath');
  }
});

然后在你的取消方法中:

goBack: function () {
    if (SettingsApp.previousPath == 'nodes.show') {
        this.transitionToRoute(SettingsApp.previousPath, this.get('content'));
    } else {
        this.transitionToRoute(SettingsApp.previousPath);
    }
},

cancel: function () {
    this.stopEditing();
    this.goBack();
},

注意:如果应用已在nodes.edit路线中加载,您可能需要提供一些后备广告。