(@MikeGrassotti 给了我这个灵感,因为他说他认为这是可以做到的(here https://stackoverflow.com/questions/17048372/ember-js-nested-folder-like-route-contain-slash),所以我开始挖掘。 :))
为此,您需要使用星形段而不是动态段。基本上,您指定一个*
在你的路径上,路由器知道会期待“任何东西”,包括斜杠,这是常规动态段不允许的,根据文档(here https://github.com/tildeio/route-recognizer):
动态段匹配除 / 之外的任何字符。
因此我们可以如下定义路由器:
App.Router.map(function() {
this.route('folder', {path: 'folder/*path'}, function(){
this.route('document', {path: 'document/:document_id'});
});
});
The document
路线嵌套在folder
路线并具有定期动态段。这folder
另一方面,路线定义了一个时髦的*path
,基本上可以是前面的任何内容folder/
.
在 - 的里面FolderRoute
,我们需要通过获取路径的最后一部分(不包括斜杠)来隔离文件夹 ID,然后查找子文件夹和/或文档,如下所示:
App.FolderRoute = Ember.Route.extend({
model: function(params){
var lastSlash = params.path.lastIndexOf('/');
var folder_id = params.path.substr(lastSlash + 1);
var folder = App.FILE_STRUCTURE.findBy('folder_id', folder_id);
Ember.set(folder, 'currentPath', params.path);
return folder;
}
});
我们还需要记住最近的路径,因为我们需要使用它来访问子文件夹。
我们过渡到路线将如下所示:
var newPath = this.get('currentPath') + "/folder/" + folder;
this.transitionToRoute('folder', newPath);
查看工作演示here http://emberjs.jsbin.com/zubusa/1/edit?html,js,output