Предположим, что у вас есть следующие маршруты в приложении Ember.
App.Router.map(function() {
this.resource('series', function() {
this.resource('serie', { path: '/:serie_id' }, function() {
this.resource('seasons', function() {
this.resource('season', { path: '/:season_id' }, function() {
this.resource('episodes', function() {
this.resource('episode', { path: '/:episode_id' });
})
});
});
});
});
});
Как мне связать конкретный эпизод с помощью помощника linkTo, который предоставляет Handlebars? Другими словами, как Эмбер выясняет, какими должны быть другие параметры URL-адреса, то есть serie_id и episode_id? В документации указано, что я должен передать модель episode на маршрут episode, как показано ниже.
{{#linkTo "episode" episode}}
Это ссылка на следующую структуру URL.
/series/:serie_id/seasons/:season_id/episodes/:episode_id/
Когда я использую помощник linkTo, подобный этому, Ember выдает ошибку, сообщающую мне, что он не может вызывать get с id на undefined. Я предполагаю, что он использует модель episode, чтобы выяснить, что такое serie_id и episode_id, и я предполагаю, что модель должна соответствовать определенному соглашению (структуре или чертежу) для Ember, чтобы найти эти id с.
Это те аспекты, которые мне труднее всего встретить в Ember. Это не очень прозрачно, даже если вы используете Ember в режиме отладки. Любые указатели или ссылки очень ценятся.
ОБНОВЛЕНИЕ 1: После некоторого копания я узнал, что метод route serialize является ключевым элементом в выполнении этого. Однако, когда я использую помощник linkTo, как показано выше, модель, переданная методу маршрута serialize по какой-либо причине undefined (хотя это не когда передается помощнику linkTo. к этому открытию можно найти здесь.
ОБНОВЛЕНИЕ 2: Оказывается, метод serieSeason route serialize получает неправильную модель, эпизод вместо сезона, когда создается ссылка. Однако неясно, почему он получает неправильную модель. Где параметр model метода serialize исходит из?
ОБНОВЛЕНИЕ 3: помощник linkTo отлично работает, если я возвращаю статические данные из метода serialize для каждого используемого маршрута, что означает, что помощник linkTo не участвует в проблеме.