Вложенное поведение маршрутизации для Ember.js

Может кто-нибудь объяснить поведение роутера и вложенных маршрутов в Ember.js?

Каковы итоговый URL, RouteName, Controller, Route и Template?

App.Router.map(function(){
    this.resource('profile');

    // URL: /profile
    // RouteName: profile
    // Controller: ProfileController
    // Route: ProfileRoute
    // Template: profile

    this.resource('artists', function(){

        // URL: /artists
        // RouteName: artists OR artists.index
        // Controller: ArtistsController OR ArtistsIndexController
        // Route: ArtistsRoute OR ArtistsIndexRoute
        // Template: artists OR artists/index

        this.resource('artists.artist', { path: ':artist_id' }, function(){

            // URL: /artists/:artist_id
            // RouteName: artists.index OR artist.index
            // Controller: ArtistsIndexController OR ArtistIndexController
            // Route: ArtistsIndexRoute OR ArtistIndexRoute
            // Template: artists/index OR artist/index

            this.resource('artist.tracks', function(){

                // URL: /artists/:artist_id/tracks
                // RouteName: artists.tracks OR artists.artist.tracks OR artist.tracks
                // Controller: ArtistsTracksController OR ArtistsArtistTracksController OR ArtistTracksController
                // Route: ArtistsTracksRoute OR ArtistsArtistTracksRoute OR ArtistTracksRoute
                // Template: artists/tracks OR artists/artist/tracks OR artist/tracks

                this.route('playing', { path: ':track_id' });

                    // URL: /artists/:artist_id/tracks/:track_id
                    // RouteName: tracks.index
                    // Controller: TracksIndexController
                    // Route: TracksIndexRouteRoute
                    // Template: tracks/index
            });
        });
    });
});

Если вы хотите увидеть весь код на моем github, https://github.com/Gerst20051/HnS-Wave/tree/master/src/stations

Файл JavaScript из моего github https://github.com/Gerst20051/HnS-Wave/blob/master/src/stations/js/app.js

На это руководство я ссылаюсь http://emberjs.com/guides/routing/defining-your-routes/

И я скопировал структуру моего приложения с этого https://github.com/inkredabull/sonific8tr

Как выглядит структура приложения

Заранее большое спасибо и помощь была бы оценена мной и всем сообществом emberjs в автобусе борьбы emberjs!

1 ответ

Решение

Вам необходимо удалить точечную запись для вложенных маршрутов. Используйте только artist вместо artists.artist,

Ваш соответствующий маршрутизатор будет,

App.Router.map(function() {
  this.resource('profile');
  this.resource('artists', function() {
    this.resource('artist', { path: ':artist_id'}, function() {
      this.resource('tracks', function() {
        this.resource('playing', { path: ':track_id' });
      })
    });
  });
});

Ты можешь использовать App.Router.router.recognizer.names чтобы получить список маршрутов, отображаемых в маршрутизаторе.

Это даст вам следующие URL, маршруты и контроллеры.

  • / профиль - ProfileRoute - ProfileController
  • / исполнители - ArtistsRoute - ArtistsController
  • / исполнители / 1 - ArtistRoute - ArtistController
  • / исполнители / 1 / песни - TracksRoute - TracksController
  • / исполнители / 1 / песни / 1 - PlayingRoute - PlayingController

Также обратите внимание, что каждый ресурс, имеющий вложенный ресурс, также получает неявный индексный маршрут. Например:- ArtistsIndexRoute, ArtistIndexRoute, TracksIndexRoute, но не PlayingIndexRoute, потому что у него нет вложенных маршрутов.

Другие вопросы по тегам