ember-cli中的嵌套资源,凌乱的应用程序结构

时间:2014-11-14 12:45:01

标签: javascript ember.js ember-cli

作为Ember.js和ember-cli的新手,我很难理解使我的应用程序正常工作的必要条件。

我的应用程序的逻辑层次结构如下:

Projects
|___Project
    |___Details
    |___Team Members
    |___Budget
        |___Planned
        |___Actual

目前,这是我的router.js:

  this.resource('projects');
  this.resource('project', { path: 'projects/:project_id' }, function() {
    this.route('details');
    this.route('team');
    this.route('milestones');
    this.resource('budget', function(){
      this.route('project-budget', { path: 'project'});
      this.route('resource-budget', {path: 'team'});
    });
  });

我遇到的问题是放置文件的位置。直到预算下两个嵌套路由的点,我的文件夹结构看起来像我的层次结构,但由于资源重置命名空间,现在为了使其工作,我必须将我的预算模板,路由和控制器拉回到顶部等级(使用项目的东西),这看起来很混乱,并且在以后试图维护这个东西时会引起头疼。

我做错了吗?

1 个答案:

答案 0 :(得分:11)

在Ember中,路由器定义可能有点棘手。 router.js中的资源/路由定义应该反映您的页面结构。例如,如果您的团队是'模板应嵌套在您的“项目”中。模板,那么'团队'应该嵌套在' project'在router.js中:

Router.map(function() {
    this.resource('project', function() {
         this.route('team');
    });
});

如果你在router.js中使用this.route(),那么你的文件夹结构应该模仿router.js中的结构。使用上面的示例,因为我们使用this.route()来定义' team',您的文件夹结构将如下所示:

app/routes/project.js
app/routes/project/team.js
app/templates/project.hbs
app/templates/project/team.hbs

但是,如果您选择在router.js中使用this.resource(),那么您告诉Ember您将重置文件夹结构。所以,如果你将router.js更改为:

Router.map(function() {
    this.resource('project', function() {
         this.resource('team');
    });
});

...然后您的文件夹结构将是这样的:

app/routes/project.js
app/routes/team.js
app/templates/project.hbs
app/templates/team.hbs

回到你的具体问题,如果你认为重置你的文件夹结构是混乱的,那么你可以在任何地方使用this.route()并放弃this.resource(),因为可嵌套this.route()登陆Ember 1.7 :http://emberjs.com/blog/2014/08/23/ember-1-7-0-released.html