Вложенные ресурсы в ember-cli, беспорядочная структура приложения


Как Новичок для обоих Эмбер.js и ember-cli, у меня возникли проблемы с пониманием того, что кажется необходимым для работы моего приложения.

Логическая иерархия моего приложения выглядит примерно так:

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

И в настоящее время это мой маршрутизатор.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 4

1 ответ:

Определение маршрутизатора может быть немного сложным в Ember. Определение ресурса / маршрута в маршрутизаторе.js должен отражать структуру вашей страницы. Например, если шаблон "команда" должен быть вложен в шаблон "проект", то шаблон "команда" должен быть вложен в шаблон "проект" в маршрутизаторе.js:

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

Если вы используете это.route() в маршрутизаторе.js, то ваша структура папок должна имитировать структуру в маршрутизаторе.JS. Используя пример выше, потому что мы используем это.route () для определения 'team', вашего структура папок будет выглядеть следующим образом:

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

Если, однако, вы решите использовать, используйте это.resource () в маршрутизаторе.js, тогда вы говорите Эмбер, что собираетесь сбросить структуру папок. Так что если вы поменяли маршрутизатор.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
Возвращаясь к вашему конкретному вопросу, если вы чувствуете, что сброс структуры папок является беспорядочным, то вы можете использовать это.маршрут() везде и отказаться от этого.resource (), потому что нестабильно это.маршрут () приземлился в Эмбере 1.7: http://emberjs.com/blog/2014/08/23/ember-1-7-0-released.html