1

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

  1. 列出节点 -> 单击编辑图标
  2. 列出节点 -> 选择节点 -> 单击编辑按钮

我可以选择取消编辑。当我取消时,我希望路由器(控制器?)回到正确的位置。也就是说,如果我来自节点列表,我想取消返回“节点列表”(#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?我可以测试什么来了解我是如何到达当前路线的?

4

1 回答 1

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注意:如果应用程序在路由中加载,您可能需要提供一些后备。

于 2013-06-17T21:32:02.017 回答