Testing 访问ember中的浏览历史记录

Testing 访问ember中的浏览历史记录,testing,ember.js,url-routing,html5-history,Testing,Ember.js,Url Routing,Html5 History,在应用程序中编辑对象节点有以下两条路径: 列出节点->单击编辑图标 列出节点->选择节点->单击编辑按钮 我可以选择取消编辑。当我取消时,我想要路由器控制器?回到正确的地方。也就是说,如果我来自节点列表,我希望取消返回到节点列表。如果我来自节点视图,我希望取消返回节点视图nodes/show/node-id。目前,这是我的NodesEditController中的实现: 如您所见,取消操作的路由是fixed nodes.show。但是在第一种情况下,我想这样做;。所以我的取消方法必须是这样的:

在应用程序中编辑对象节点有以下两条路径:

列出节点->单击编辑图标 列出节点->选择节点->单击编辑按钮 我可以选择取消编辑。当我取消时,我想要路由器控制器?回到正确的地方。也就是说,如果我来自节点列表,我希望取消返回到节点列表。如果我来自节点视图,我希望取消返回节点视图nodes/show/node-id。目前,这是我的NodesEditController中的实现:

如您所见,取消操作的路由是fixed nodes.show。但是在第一种情况下,我想这样做;。所以我的取消方法必须是这样的:

 cancel: function () {
    this.stopEditing();
    if (some_test) { this.transitionToRoute('nodes.show', this.get('content'));
    } else { this.transitionToRoute('nodes.index'); }
 }
如何实现一些测试?我可以通过什么测试来了解我是如何到达当前路由的?

重新打开Ember.route以在路由退出时存储当前路径:

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 route中,您可能需要提供一些回退。请重新打开Ember。退出路由时存储当前路径的路由:

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 route中,您可能需要提供一些后备方案。

这不应该是Ember.route.reopen吗?我可以在我的应用程序的任何地方这样做吗?对不起,这里完全是新手。谢谢,成功了。这确实是恩伯·路·重开。我已经稍微修改了你的回复,使其更加完整。那不是应该是Ember.Route.reopen吗?我可以在我的应用程序的任何地方这样做吗?对不起,这里完全是新手。谢谢,成功了。这确实是恩伯·路·重开。我对你的答复稍作修改,使之更加完整。