Контроллер / соглашения о маршрутах для вложенных маршрутов в 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 каталога для хранения файлов маршрута:

  1. Приложение / маршруты / дорожки /
    • index.js
  2. приложение / маршруты / дорожки /
    • 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
Другие вопросы по тегам