Как правильно генерировать ресурсы и маршруты с помощью Ember CLI
Я пытаюсь определить ресурс и маршрут, подобный этому, с помощью Ember CLI.
this.resource('events', function() {
this.route('view', { path: "/:id"})
});
Если я попробую это: ember g resource events/view
, я получаю следующее:
this.resource('events/view', { path: 'events/views/:events/view_id' });
Если я попробую: ember g resource events
и: ember g resource events/view
this.resource('events', { path: 'events/:events_id' });
this.resource('events/view', { path: 'events/views/:events/view_id' });
Если я попробую: ember g resource events
и: ember g route events/view
this.resource('events', { path: 'events/:events_id' });
this.route('events/view');
Есть ли способ сделать это?
Ответы
Ответ 1
В это время вложенные ресурсы и маршруты в желаемом шаблоне автоматически не генерируются с помощью чертежей по умолчанию, найденных в Ember CLI. Чертежи по умолчанию генерируют скелетные файлы и структуру файлов, а некоторые используют их afterInstall
для обновления других файлов. Следуя этим чертежам по умолчанию, вы должным образом генерируете эти элементы:
ember g resource events
ember g route events/view
Затем вы можете изменить Router.map в router.js с предполагаемым вложением:
Router.map(function() {
this.resource('events', function() {
this.route('view', { path: "/view/:id" });
})
});
Теперь вы можете ударить 'events/view/1' в своем браузере и посмотреть маршруты, которые вы искали в маршрутах Ember Inspector's вкладка.
В качестве альтернативы вы можете выполнить следующее и создать собственный проект:
ember generate blueprint nested-resource-route
В корне проекта будет создан каталог чертежей, в котором будет создан новый чертеж. Используя чертежи ресурса и маршрута в качестве основы, вы можете свернуть собственный генератор, чтобы выполнить то, что вы ищете.
Ответ 2
Поведение, которое вы хотите, возможно в ember-cli 0.1.5 и более поздних версиях. Из примечания к выпуску:
# 2748 улучшил генератор маршрутизатора, чтобы поддерживать правильно вложенные маршруты и ресурсы, ранее, если у вас был маршрут, похожий на:
Router.map(function() {
this.route("foo");
});
И вы сделали ember g route foo/bar
сгенерированные маршруты:
Router.map(function() {
this.route("foo");
this.route("foo/bar");
});
Теперь он правильно управляет вложенными маршрутами, поэтому результатом будет:
Router.map(function() {
this.route("foo", function() {
this.route("bar");
});
});
Дополнительно добавлена опция --path
, поэтому вы можете делать такие вещи, как ember g route friends/edit --path=:friend_id/id
, создавая вложенные маршрут под friends
как: this.route('edit', {path: ':friend_id/edit'})