我在应用程序中有以下两个路径来编辑对象( node ):
我可以选择取消编辑。当我取消时,我想让路由器(控制器?)回到正确的位置。也就是说,如果我来自节点列表,我希望取消返回“节点列表”(#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
?我可以测试什么来了解我如何到达当前路线?
答案 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
路线中加载,您可能需要提供一些后备广告。