2013-06-11 43 views
5

我正在用Ember.js构建一个类似功能的文件管理器应用程序。我想以“... /#/ files/Nested/Inside /”的格式显示嵌套文件夹的URL,并且它与linkTo正常工作;但是,如果我刷新(或直接转到URL),我有错误消息“没有路由匹配URL'/ files/Nested/Inside'”。有没有什么方法可以让Ember.js在这种情况下工作?谢谢。Ember.js像路由嵌套的文件夹(包含斜线)

这里是我当前的路由设置:

FM.Router.map(function() { 
    this.resource('folders', { path: '/files' }) 
    this.resource('folder', { path: '/files/:path' }) 
}) 

FM.FoldersRoute = EM.Route.extend({ 
    model: function() { 
    return FM.Folder.find('/') 
    } 
}) 

FM.FolderRoute = EM.Route.extend({ 
    model: function(params) { 
    return ns.Folder.find(params.path) 
    }, 
    serialize: function(folder) { 
    return { path: folder.get('path') } 
    } 
}) 

回答

6

哇,有意思的问题。它是可能的,但我没有尝试过自己或在野外看到任何这样的例子。

在引擎盖下,余烬使用tildeio routerroute-recognizer来解析路线。这条路线的自述说明如何define more elaborate routes,如:

router.map(function(match) { 
    // this will match anything, followed by a slash, 
    // followed by a dynamic segment (one or more non- 
    // slash characters) 
    match("/*page/:location").to("showPage"); 
}); 

因此,要获得嵌套的文件夹,那么您可能能够做这样的事情:

FM.Router.map(function() { 
    this.resource('folders', { path: '/files' }) 
    this.resource('folder', { path: '/files/*path' }) 
}) 

希望这有助于。

+0

它工作。谢谢! – tungd