【发布时间】:2014-07-03 18:52:42
【问题描述】:
我刚刚在 ember-cli 中更改了我的路由结构并破坏了我的应用程序。我想将我当前的结构嵌套更深一层......
之前:
Router.map(function() {
this.resource('placements', function() {
this.route('add');
this.route('import');
this.route('open');
});
this.route('admin');
});
之后:
Router.map(function() {
this.resource('portal', function() {
this.resource('placements', function() {
this.route('add');
this.route('import');
this.route('open');
});
this.route('admin');
});
});
我的模板结构也需要改变...
之前:
- templates/
- placements/
- add.hbs
- import.hbs
- index.hbs
- open.hbs
- admin.hbs
- application.hbs
- index.hbs
- placements.hbs
之后:
- templates/
- portal/
- placements/
- add.hbs
- import.hbs
- index.hbs
- open.hbs
- admin.hbs
- index.hbs
- placements.hbs
- application.hbs
- index.hbs
- portal.hbs
我以为我已经一对一地进行了所有更改,但由于某种原因,当我重新启动 ember 服务器时,嵌套的“放置”路线被破坏了。
在控制台日志中,我注意到 ember 仍在尝试在旧的 templates/placements/index 下查找 placements.index 而不是新目录。
有一种理论认为模板不能像路由器那样嵌套?这意味着我可能需要使用 renderTemplate hook 明确定义每条路线,以便它显示正确的模板......这可能会很痛苦,因为这个项目将非常大。 ..也许我做错了什么?
【问题讨论】:
-
我不确定您是否需要嵌套模板目录。我认为 Ember 不会做多于一层的模板解析,即使路由嵌套多于一层。
-
如果这是真的,那么它就说明了问题......但是如何定义这样的嵌套结构并让 ember 能够找到正确的模板?
-
我认为 Ember 的模板解析总是去 templates/resource/route.hbs。即使路径中的资源嵌套在另一个原因下。这有点像当你过渡到一条路线时,你总是会去
route.transitionTo('placements.add')而不是route.transitionTo('portal.placements.add'),例如。我认为这个想法是为了减少app逻辑和url结构之间的耦合,所以可以改变url而不需要完全改变app中的逻辑。 -
@Adam 问题是
placements.hbs有一个{{output}}并且默认情况下在其中有一个“索引”,以及其他3个页面(添加,导入,打开)在内部呈现它...现在通过向上碰撞placements/目录,它会杀死placements.hbs并只渲染index.hbs... 我希望这是有道理的 -
我对它的工作原理的理解可能从一开始就有缺陷......但是当只有一层深度时它工作正常