Контроллер / соглашения о маршрутах для вложенных маршрутов в ember
У меня есть этот ресурс с вложенным маршрутом в моем приложении ember:
router.js:
Router.map(function() {
this.resource('posts', function () {
this.route('show', {path: '/:id'});
});
});
Что такое соглашение в ember для моих контроллеров? Создаю ли я отдельный файл для каждого URL или show
обработчик войти /controllers/posts.js
? Или, может быть, есть несколько правильных способов сделать это?
Это то, что у меня есть в /routes/posts.js:
import Ember from 'ember';
var PostsRoute = Ember.Route.extend({
model: function() {
return posts;
}
});
var posts = [
{
id: '1',
title: 'Object nr one',
content: 'This is the content of Object nr one.'
},
{
id: '2',
title: 'Obelix',
content: 'A fat gaul. From a comic book.'
},
{
id: '3',
title: 'Werner',
content: 'Wat soek werner hier? Dis mos nou belaglik man.'
}
];
export default PostsRoute;
И это /controllers/posts.js:
import Ember from "ember";
export default Ember.ArrayController.extend({});
Я был бы признателен, если бы кто-то показал мне правильный способ ведения дел в этом примере. Я действительно изо всех сил пытаюсь найти подходящие примеры в Интернете.
Обратите внимание, что я использую Ember CLI
1 ответ
"Показать обработчик" никогда не идет в файл контроллера, это скорее Route
, Вы создаете отдельный маршрут, контроллер, шаблон для каждого из ваших resource
или же route
директивы. Вы можете сказать контроллеру, что он должен вести себя так же, как и другой контроллер, или использовать миксин. Например:
router.coffee:
@resource 'training', ->
@route 'chest'
@route 'shoulders'
Значит вам нужна следующая структура:
приложение / маршруты / обучение [ваш родительский ресурс]/chest.js[ваш маршрут ребенка] приложение / маршруты / обучение / плечи.js
Если вам нужен контроллер для каждого из этих маршрутов, вам понадобятся файлы со следующими путями:
приложение / контроллеры / обучение / chest.js приложение / контроллеры / обучение / плечи.js
И шаблоны:
приложение / шаблоны / обучение / chest.js приложение / шаблоны / обучение / плечи.js
Это потому что я определил training
как ресурс (родительский) и маршруты как его потомки.
Если вы используете Ember CLI, вы можете использовать такие команды, как:
Ember G контроллер тренировки / плечи
или же:
Ember G маршрут тренировки / плечи
Последняя команда сгенерирует вас: маршрут, шаблон и запись в router.js. Вы можете использовать эти команды, чтобы не беспокоиться о структуре каталогов. Однако важно помнить, что когда вы определяете ресурс внутри ресурса, дочерний ресурс на самом деле не является дочерним, и его не следует размещать в каталоге родительского ресурса. Например:
@resource 'tracks', ->
@resource 'track', path: '/track/:track_id', ->
@route 'edit'
Это означает, что вам нужно 2 каталога для хранения файлов маршрута:
- Приложение / маршруты / дорожки /
- index.js
- приложение / маршруты / дорожки /
- edit.js
Вместо приложение / маршруты / дорожки / дорожки / редактировать, Итак, в вашем примере для следующего роутера:
Router.map(function() {
this.resource('posts', function () {
this.route('show', {path: '/:id'});
});
});
Приложение / маршруты должно выглядеть так:
app/routes:
- posts.js # main route for whole resource
- posts/ # directory which contains files for routes inside posts resource
- show.js # posts/show route