2014-11-14 1 views
4

Как новичок в Ember.js и ember-cli, у меня возникают проблемы с пониманием того, что кажется необходимым для работы моего приложения.Вложенные ресурсы в 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'}); 
    }); 
    }); 

Что у меня возникают проблемы с есть где поставить мои файлы. До точки двух вложенных маршрутов в рамках бюджета моя структура папок выглядела как моя иерархия, но поскольку ресурс сбрасывает пространство имен, теперь, чтобы заставить его работать, я должен вытащить свой шаблон бюджета, маршрут и контроллер обратно в начало уровень (с материалами проектов), который просто кажется беспорядочным и, как это может вызвать головные боли при попытке сохранить эту вещь позже.

Я делаю это неправильно?

+0

Бюджетный ресурс кажется неуместным, ни один из ваших ресурсов вложенные в «проект» используют динамический сегмент, почему они там в первую очередь. –

+0

@PatsyIssa: потому что все они принадлежат к проекту, поэтому проект/детали, проект/команда и т. Д. – redOctober13

ответ

11

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

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

Если вы используете this.route() в router.js, то ваша структура папок должна имитировать структуру в router.js. Используя пример выше, потому что мы используем this.route(), чтобы определить «команду», ваша структура папок будет выглядеть так:

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

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

+0

Я пытался использовать «маршрут» вместо «ресурса» (против рекомендации ember использовать ресурсы для существительных) , но затем он жаловался на необходимость использования ресурса, чтобы что-то сделать, поэтому мне пришлось переключить его обратно. В конечном итоге мне пришлось сбросить структуру папок, чтобы заставить его работать, но теперь бюджетный материал находится на верхнем уровне, а команда и детали находятся в проекте. Может быть, мне нужно начать использовать [Pod Structure] (http://www.ember-cli.com/#pod-structure), но я боюсь, что я действительно потрудился с этим. Думаю, с веткой, хотя я не должен бояться. – redOctober13

+0

Вложение this.route() должно работать нормально. Вот пример: http://emberjs.jsbin.com/fobofe/4/edit?html. Я использую глобальные переменные вместо Ember CLI в jsbin, но принципы одинаковы. –

+0

Какую версию Ember вы используете? Nestable this.route() был введен в версии 1.7: http://emberjs.com/blog/2014/08/23/ember-1-7-0-released.html –

Смежные вопросы