Ember-Router:从递归路径动态创建状态

时间:2013-01-09 09:47:04

标签: ember.js ember-router

我需要一种方法让ember路由器路由到递归路径。

For Example:
/:module
/:module/:submodule
/:module/:submodule/:submodule
/:module/:submodule/:submodule/...

这可以用Embers路由器完成,如果是,怎么做?

我一直在寻找例子,撕掉了源头,而且我已经得出结论,这是不可能的。

在之前的一个问题中,有人指出了一种手动获取网址并将其拆分的方法,但我仍然坚持创建路由器要解析的状态。

截至目前,在我的项目中,我目前只使用Ember.HashLocation来设置我自己的状态管理器。

需要这样做的原因是因为模块定义存储在数据库中,并且在任何给定点可以递归地添加子模块的子模块。所以我试图让Application Engine处理这个变化。

2 个答案:

答案 0 :(得分:1)

数据库中的子模块是否没有唯一ID?在我看来,您应该直接进入相应的模块或子模块,而不是在路径中表示您的层次结构。当然,层次结构仍然在您的数据模型中,但它不应该 在您的路由方案中表示。只需使用:

/module/:moduleId
/submodule/:submoduleId

不要对路由中的层次结构进行编码。我知道这样做可能很自然,但可能没有技术上的理由。

如果您的子模块没有具有唯一ID,那可能会有点困难......您可以通过将祖先ID连接在一起(例如,使用下划线)来构建唯一ID,这类似拆分URL,但可能更清洁一点。我会说Ember / Ember Data对于带有复合键的实体来说似乎不太容易使用 - 如果所有内容都有一个简单的数字键,一切都变得更容易(任何人都想与我争论,请向我解释!)。

答案 1 :(得分:0)

你的意思是这样的:

App.Router.map(function(match) {
  match('/posts').to('blogPosts');
  match('/posts/:blog_post_id').to('showBlogPost');
});