Ошибка при обработке маршрута по неизвестной причине

Моя цель: эмулировать вложенный маршрут, но отображать его в выходе приложения.

Например:

/videos – основной маршрут

/videos/video001 — вложенный маршрут

/videos/video001/slide001 — не вложенные. Он находится на том же уровне, что и /videos.

Как я это делаю:

У меня есть следующий маршрутизатор:

App.Router.map(function () {
    this.resource('videos', { path: '/videos' }, function () {
        this.resource('video', { path: '/:video_id' });
    });

    this.resource('slide', { path: '/videos/:video_id/:slide_id' });
});

Чтобы маршрут «слайд» работал должным образом, я переопределяю метод «сериализации» и возвращаю «video_id» и «slide_id»

И в этот момент все вроде нормально. По крайней мере, страница загружается, как ожидалось.

В чем проблема?

Когда я перехожу к "/videos/video001" из "/videos/video001/slide001" через помощник "link-to", я вижу следующую ошибку: "Ошибка при обработке маршрута: видео". И ничего больше. Я не могу понять какая ошибка возникает и почему ember не может правильно обработать маршрут.Однако я вижу, что URL-адрес был изменен на «/videos/video001».

Какие-либо предложения? Как отладить эту ситуацию или хотя бы получить полезное сообщение об ошибке?

ОБНОВЛЕНИЕ В этой статье описывается точная текущая ситуация и предлагаются некоторые решения: http://hashrocket.com/blog/posts/ember-routing-the-when-and-why-of-вложение


person pro100sanya    schedule 22.10.2014    source источник
comment
предложение, в консоли Chrome (держите ее открытой, пока вы загружаете приложение), разверните сообщение error while processing route, у него должен быть стек, который может помочь вам указать, где ошибка. Вопрос: Почему slide не является ресурсом videos.video?   -  person MilkyWayJoe    schedule 22.10.2014
comment
Эта трассировка стека вообще бесполезна. Список внутренних методов ember.js ember-data.js и jquery. Я не могу вложить «слайд» в «видео», потому что мне нужно отобразить его в приложении. Если я буду использовать обработчик рендеринга и указать в: приложение, у меня будет еще одна куча проблем, связанных с поддержанием иерархии представлений.   -  person pro100sanya    schedule 22.10.2014
comment
Вложите слайд ресурса в свой видеоресурс   -  person Patsy Issa    schedule 22.10.2014


Ответы (2)


Ok. Я не смог понять, в чем проблема, и, кажется, никто не может помочь с этим даже на канале ember irc. Итак, я нашел интересную статью http://hashrocket.com/blog/posts/ember-routing-the-when-and-why-of-nesting и реализовал вложенность через {into: 'application'}, но для правильной работы я переопределил хук renderTemplate в все шаблоны для определения правильного порядка рендеринга. И все работает нормально.

person pro100sanya    schedule 22.10.2014

Я делаю что-то подобное, но без нескольких идентификаторов. Попробуйте это на своем роутере:

this.resource('videos', { path: '/videos' }, function () {
    this.resource('video', { path: '/:video_id' });

    this.resource('videos.video.slide', { path: '/videos/:video_id/:slide_id' });
});

Ваши маршруты должны быть App.VideosRoute, App.VideosVideoRoute и App.VideosVideoSlideRoute. То же самое для контроллеров (при необходимости)

person ultimatemonty    schedule 22.10.2014
comment
проверка.. Не могли бы вы немного объяснить, почему в чем разница между моим и этим решением? - person pro100sanya; 22.10.2014
comment
Это решение странным образом изменило поведение, но не помогло. - person pro100sanya; 22.10.2014
comment
@pro100sanya то, что вы хотите сделать, возможно. Проблема заключается в том, чтобы назвать маршруты таким образом, чтобы распознаватель Ember мог их найти. Я задал аналогичный вопрос по адресу stackoverflow.com/questions/25331816 /route-not-seeing-url-slug и именно на этом основан мой ответ. Я изменил свой ответ, чтобы, надеюсь, лучше объяснить, что сработало для меня, а также вложил маршрут slides в видео. Когда у меня будет немного времени сегодня вечером, я могу попытаться заставить работать JSBin. - person ultimatemonty; 22.10.2014